Leetcode[94]-Binary Tree Inorder Traversal
2015-06-11 20:23
411 查看
Given a binary tree, return the inorder traversal of its nodes’ values.
For example:
Given binary tree
return
递归遍历法:
非递归算法1:
非递归遍历方法二:(递归条件只需要判断栈是否为空)
在递归条件中,
首先取出栈顶节点,如果不为空的话,就把它的左节点进栈,然后再取栈顶元素,如果不为空,则再让它的左节点进栈,直到栈顶元素是空的节点为止;
然后让栈顶的空指针退栈
接着判断栈是否为空,如果不为空,则栈顶节点出栈,并将栈顶元素的值加入到数组中,然后把该节点的右节点入栈(右节点是否是空的,此处不做判断,内部的while循环会判断,因为内while循环后的栈顶节点必定是空指针)
最后,返回数组即可。
For example:
Given binary tree
{1,#,2,3},
1 \ 2 / 3
return
[1,3,2].
递归遍历法:
/** * 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> result; vector<int> inorderTraversal(TreeNode *root) { result.clear(); inorder(root); return result; } void inorder(TreeNode* root){ if(root == NULL) return; inorder(root->left); result.push_back(root->val); inorder(root->right); } };
非递归算法1:
/** * 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> inorderTraversal(TreeNode* root) { vector<int> result; stack<TreeNode *> myStack; if (root == NULL) return result; TreeNode *p = root; while (p!=NULL || !myStack.empty()) { while (p != NULL) { myStack.push(p); p = p->left; } if (!myStack.empty()) { p = myStack.top(); myStack.pop(); result.push_back(p->val); p = p->right; } } return result; } };
非递归遍历方法二:(递归条件只需要判断栈是否为空)
在递归条件中,
首先取出栈顶节点,如果不为空的话,就把它的左节点进栈,然后再取栈顶元素,如果不为空,则再让它的左节点进栈,直到栈顶元素是空的节点为止;
然后让栈顶的空指针退栈
接着判断栈是否为空,如果不为空,则栈顶节点出栈,并将栈顶元素的值加入到数组中,然后把该节点的右节点入栈(右节点是否是空的,此处不做判断,内部的while循环会判断,因为内while循环后的栈顶节点必定是空指针)
最后,返回数组即可。
/** * 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> inorderTraversal(TreeNode* root) { vector<int> result; if(root == NULL) return result; stack<TreeNode *> stk; TreeNode* p = root; stk.push(root); while(!stk.empty()){ while((p = stk.top()) && p){ stk.push(p->left); } stk.pop(); if(!stk.empty()){ p = stk.top(); result.push_back(p->val); stk.pop(); p = p->right; stk.push(p); } } return result; } };
相关文章推荐
- openvas
- eclipse怎么设置字体大小
- 代理proxy
- QCustomPlot使用手册(四)
- Linux IO模型(6.11)
- Oracle学习(十三)之管理表空间以及数据库闪回设置
- aam中的搜索迭代
- 给surfaceview设置默认背景
- CentOS7 安装 OpenSSL 1.0.1m 和 OpenSSH 6.8p1
- 第一个maven构建
- WGS84,GCJ02, BD09坐标转换
- GIS空间分析 面状要素中轴线提取
- 存储管理器实验
- ubuntu下安装eclipse,配置jdk环境变量仍然报错
- 设置自定义input框内只能输入数字
- POJ 2104 区间第K大值(划分树做法)
- Android耳机线控详解,蓝牙耳机按钮监听(仿酷狗线控效果)
- 构建之法——典型用户和场景+软件设计与实现+用户体验
- poj1094
- C语言介绍(linux)