博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【LeetCode】144. Binary Tree Preorder Traversal (3 solutions)
阅读量:7239 次
发布时间:2019-06-29

本文共 2600 字,大约阅读时间需要 8 分钟。

Binary Tree Preorder Traversal

Given a binary tree, return the preorder traversal of its nodes' values.

For example:

Given binary tree {1,#,2,3},

1    \     2    /   3

 

return [1,2,3].

Note: Recursive solution is trivial, could you do it iteratively?

 

解法一:递归

/** * Definition for a binary tree node. * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    vector
preorderTraversal(TreeNode* root) { vector
ret; Helper(ret, root); return ret; } void Helper(vector
& ret, TreeNode* root) { if(root) { ret.push_back(root->val); Helper(ret, root->left); Helper(ret, root->right); } }};

 

解法二:借助栈的非递归,需要记录每个节点是否访问过

/** * Definition for binary tree * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    vector
preorderTraversal(TreeNode *root) { vector
ret; if(root == NULL) return ret; stack
stk; unordered_map
visited; stk.push(root); visited[root] = true; while(!stk.empty()) { TreeNode* top = stk.top(); stk.pop(); ret.push_back(top->val); if(top->right != NULL && visited[top->right] == false) { stk.push(top->right); visited[top->right] = true; } if(top->left != NULL && visited[top->left] == false) { stk.push(top->left); visited[top->left] = true; } } return ret; }};

 

解法三:借助栈的非递归,无需记录每个节点是否访问过。

/** * Definition for a binary tree node. * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    vector
preorderTraversal(TreeNode* root) { vector
ret; if(root == NULL) return ret; stack
stk; stk.push(root); while(!stk.empty()) { TreeNode* top = stk.top(); stk.pop(); ret.push_back(top->val); if(top->right) stk.push(top->right); if(top->left) stk.push(top->left); } return ret; }};

转载地址:http://uvrfm.baihongyu.com/

你可能感兴趣的文章
WIN内核线程池函数
查看>>
机器学习常见算法个人总结(面试用)
查看>>
T4 好用的Vs扩展
查看>>
Swift3.0 split函数切割字符串
查看>>
字典树
查看>>
单例模式的七种写法
查看>>
extjs_08_界面布局
查看>>
卷积神经网络(CNN)代码实现(MNIST)解析
查看>>
git 在命令行与图形状态下使用详情
查看>>
爱上MVC~Web.Config的Debug和Release版本介绍
查看>>
linux操作系统中oracle数据库的密码过期问题解决
查看>>
Spring中Bean的五个作用域
查看>>
hadoop之 distcp(分布式拷贝)
查看>>
Java后端程序员1年工作经验总结
查看>>
使用Vundle管理配置Vim的插件
查看>>
JDBC连接池&DBUtils使用
查看>>
可以通过shadowserver来查看开放的mdns(用以反射放大攻击)——中国的在 https://mdns.shadowserver.org/workstation/index.html...
查看>>
IOS系统控件高度
查看>>
Flink - ResultPartition
查看>>
2017.10.09 穆瑞课KUKA机器人培训视频的感想
查看>>