76. Binary Tree Inorder Traversal
来源:互联网 发布:mac如何播放网页视频 编辑:程序博客网 时间:2024/06/05 05:56
Given a binary tree, return the inorder traversal of its nodes' values.
For example:
Given binary tree {1,#,2,3}
,
1 \ 2 / 3
return [1,3,2]
.
备注:之前只写了递归的算法,就没有写文章,现在先把递归的算法写上,等后面补上其他的非递归的算法。
public List<Integer> inorderTraversal(TreeNode root) { List<Integer> list = new ArrayList<Integer>();if(root == null){return list;}else{list.addAll(inorderTraversal(root.left));list.add(root.val);list.addAll(inorderTraversal(root.right));}return list; }
方法二:采用迭代的思想中序遍历二叉树。
利用链表和栈实现,node表示入栈的元素,要把其最左分支的所有左孩子都放到栈中,然后弹出的元素popnode即是需要加入到结果list中的,然后判断popnode是否有右孩子,有的话就把其右孩子作为node压入栈中(相当于遍历当前popnode结点的右子树)。继续循环。
/** * 用迭代的思想做二叉树的中序遍历。(自己想的方法) * @param root * @return */public List<Integer> inorderTraversal2(TreeNode root) {List<Integer> list = new ArrayList<Integer>();if(root == null){return list;}else{TreeNode node = root; Stack stack = new Stack();stack.push(node);/*node表示入栈的元素,popnode表示弹栈的元素*/while(!stack.isEmpty()){while(node.left != null){//向左走到尽头,把最左分支的结点都入栈。node = node.left;stack.push(node);}TreeNode popnode= (TreeNode) stack.pop();//弹出栈顶元素list.add(popnode.val);/*如果弹栈的元素有右孩子,则让其右孩子入栈,进行下一次循环*/if(popnode.right != null){node = popnode.right;stack.push(node);}}}return list;}/** * 迭代的思想做。 * 调整方法二中的代码。 */public List<Integer> inorderTraversal3(TreeNode root){List<Integer> list = new ArrayList<Integer>();if(root == null){return list;}else{TreeNode node = root; Stack stack = new Stack();stack.push(node);/*node表示入栈的元素,popnode表示弹栈的元素*/while(!stack.isEmpty()){if(node.left != null){node = node.left;stack.push(node);}else{TreeNode popnode= (TreeNode) stack.pop();//弹出栈顶元素list.add(popnode.val);/*如果弹栈的元素有右孩子,则让其右孩子入栈,进行下一次循环*/if(popnode.right != null){node = popnode.right;stack.push(node);}}}}return list;}
类似的题目有二叉树的前序遍历:http://blog.csdn.net/u010339647/article/details/50505831
0 0
- 76. Binary Tree Inorder Traversal
- Binary Tree Inorder Traversal
- Binary Tree Inorder Traversal
- Binary Tree Inorder Traversal
- Binary Tree Inorder Traversal
- Binary Tree Inorder Traversal
- Binary Tree Inorder Traversal
- Binary Tree Inorder Traversal
- Binary Tree Inorder Traversal
- Binary Tree Inorder Traversal
- Binary Tree Inorder Traversal
- Binary Tree Inorder Traversal
- Binary Tree Inorder Traversal
- Binary Tree Inorder Traversal
- Binary Tree Inorder Traversal
- Binary Tree Inorder Traversal
- Binary Tree Inorder Traversal
- Binary Tree Inorder Traversal
- Educational Codeforces Round 6 B. Grandfather Dovlet’s calculator(模拟)
- 我的myeclipse+maven
- C++中函数如何返回数组
- ZOJ11024
- (入门)uva 1368 DNA Consensus String
- 76. Binary Tree Inorder Traversal
- javascript---JSON
- c语言中const volatile关键字 和 elf section的关系
- Palindrom Numbers
- UVA11729 - Commando War (贪心)
- FFMpeg提取视频帧
- [从头学数学] 第60节 平行四边形和梯形
- 分分钟带你搞定Android开发圆形头像
- win10、win7系统64位oracle11g安装教程以及32位plsql连接教程