LeetCode—Binary Tree Preorder Traversal 解题报告
来源:互联网 发布:淘宝进货的口子在哪儿 编辑:程序博客网 时间:2024/06/05 10:45
转载请注明:http://blog.csdn.net/ict2014/article/details/17500111
原题如下:
题目解析:
这道题目是“二叉树的前序遍历”。通常有两种做法,递归求解以及循环求解。
递归求解,较为简单,先访问当前节点、访问左孩子结点、在访问右孩子节点。详细可参照如下代码。
循环求解,较为麻烦。但是相对于递归求解而言,这种方法耗费的函数栈空间更小,并且省去了大量的函数调用时间的开销,速度更加快,只不过程序不如递归求解的美丽客观。循环求解,需要使用一个栈保存已经访问过的数据,以便于对节点的右孩子结点进行访问。当面对一个节点的时候,我们有两种选择:
第一:该节点不为空,访问该节点,并且压入左子树
第二:该节点为空,抛出该点。如果当前栈不为空,则抛出一个节点,压入其右子树。
题目代码:
/** * 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<int> preorderTraversal(TreeNode *root) { vector<int> pre_order; if(root == NULL){ return pre_order; } PreorderIterative(root, pre_order); return pre_order; } //recursively implementation void PreorderRecursive(TreeNode* root, vector<int>& result){ if(root == NULL){ return; } //visit the root node result.push_back(root->val); //visit left child tree PreorderRecursive(root->left, result); //visit right child tree PreorderRecursive(root->right, result); } //iteratively implementation void PreorderIterative(TreeNode* root, vector<int>& result){ if(root == NULL){ return; } //keep the visited nodes stack<TreeNode*> datas; datas.push(root); TreeNode* top; while(!datas.empty()){ top = datas.top(); //current node is not null //visit the current node if(top != NULL){ result.push_back(top->val); datas.push(top->left); }else{ //pop the NULL node datas.pop(); //the stack is not empty //pop the top visited node //push its right child if(!datas.empty()){ top = datas.top(); datas.pop(); datas.push(top->right); } } } }};
0 0
- LeetCode 解题报告 Binary Tree Preorder Traversal
- 【LeetCode】Binary Tree Preorder Traversal 解题报告
- LeetCode—Binary Tree Preorder Traversal 解题报告
- [LeetCode OJ] Binary Tree Preorder Traversal 解题报告
- LeetCode(144) Binary Tree Preorder Traversal解题报告
- [leetcode] 144. Binary Tree Preorder Traversal 解题报告
- LeetCode 144. Binary Tree Preorder Traversal 解题报告
- 【LeetCode】144 . Binary Tree Preorder Traversal 解题报告
- LeetCode 144. Binary Tree Preorder Traversal 解题报告
- [Leetcode] 144. Binary Tree Preorder Traversal 解题报告
- [leetcode]144. Binary Tree Preorder Traversal@Java解题报告
- 【LeetCode】Construct Binary Tree from Preorder and Inorder Traversal 解题报告
- LeetCode(105) Construct Binary Tree from Preorder and Inorder Traversal解题报告
- [leetcode] 105. Construct Binary Tree from Preorder and Inorder Traversal 解题报告
- 【LeetCode】105. Construct Binary Tree from Preorder and Inorder Traversal 解题报告
- [Leetcode] 105. Construct Binary Tree from Preorder and Inorder Traversal 解题报告
- [leetcode]105. Construct Binary Tree from Preorder and Inorder Traversal@Java解题报告
- Construct Binary Tree from Preorder and Inorder Traversal 解题报告
- Ubuntu下使用adb和USB连接的方式进行android设备调试
- 說文解字抄 3-2 (三和先生 筆寫)
- php+xampp添加虚拟主机
- 本地事务和分布式事务工作实践
- js浏览器兼容问题总结及解决办法
- LeetCode—Binary Tree Preorder Traversal 解题报告
- 說文解字抄 3-1 (三和先生筆寫)
- 尾递归
- Silverlight中 多语言
- Freetype 使用
- 编写Android.mk中的LOCAL_SRC_FILES的终极技巧
- 如何在linux下查看电脑硬件设备属性
- 个人图文理解类的知识
- 用户登陆,密码加密的问题