144. Binary Tree Preorder Traversal
2016-07-20 14:19
399 查看
题目:Binary Tree Preorder Traversal
原题链接:https://leetcode.com/problems/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: void preOrder(TreeNode* root, vector<int>& ans) { if(root == NULL) return; ans.push_back(root -> val); preOrder(root -> left, ans); preOrder(root -> right, ans); } vector<int> preorderTraversal(TreeNode* root) { vector<int> ans; preOrder(root, ans); return ans; } };
非递归:需要用到栈(stack),由于栈的特性是后进显出(LIFO,Last In First Out),所以在子树压栈的时候需要先压右子树再压左子树,代码如下:
/** * 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<int> preorderTraversal(TreeNode* root) { vector<int> ans; stack<TreeNode* > st; if(root) st.push(root); while(!st.empty()) { TreeNode* front = st.top(); ans.push_back(front -> val); st.pop(); if(front -> right) st.push(front -> right); if(front -> left) st.push(front -> left); } return ans; } };
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- 文件遍历排序函数
- Lua 学习笔记之C API 遍历 Table实现代码
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C#遍历文件夹后上传文件夹中所有文件错误案例分析
- C#中遍历Hashtable的4种方法
- C++联合体转换成C#结构的实现方法
- Erlang中遍历取出某个位置的最大值代码
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结