LeetCode145 Binary Tree Postorder Traversal Java题解(递归 迭代)

原创 2015年07月09日 10:34:20

题目:

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

For example:
Given binary tree {1,#,2,3},

   1
    \
     2
    /
   3

return [3,2,1].

解题:

递归的还是和前面中序和先序一样,只是交换一下顺序而已

public static List<Integer> result=new ArrayList<Integer>();
	 public static List<Integer> postorderTraversal(TreeNode root) {
		 
		 if(root!=null)
		 {
			 postorderTraversal(root.right);
			 postorderTraversal(root.left);
			 result.add(root.val);
		 }
		 return result;
	        
	    }

迭代的稍微复杂一些  总体上和前面的解法是一样的  不过这边要先访问左右节点,同样还是以左节点作为主线,不过这里要增加一个栈记录每个节点的右节点是否已经被访问过,只有当左右节点都被访问的前提下才能访问根节点

public static List<Integer> postorderTraversal2(TreeNode root) {
		 
		 List<Integer> res=new ArrayList<>();
		 Stack<TreeNode> nodeStack=new Stack<>();
		 Stack<Integer> nodeState=new Stack<>();//记录右节点是否已经访问过,1表示已经访问了,0表示未访问
		 
		 if(root==null)
			 return res;
		 else {
			nodeStack.push(root);
			nodeState.push(0);
			root=root.left;
		}
		 
		 while(!nodeStack.isEmpty())
		 {
			 while(root!=null)
			 {
				 nodeStack.push(root);
				 nodeState.push(0);
				 root=root.left;
			 }//当这个循环跳出的时候  说明nodeStak栈顶的那个节点没有左节点
			 
			 if(nodeState.peek()==1)//如果这时候已经访问过右节点了  这时候就可以访问根节点
			 {
				 res.add(nodeStack.pop().val);
				 nodeState.pop();//把根节点对应的状态值去除
				 
			 }
			 else {//访问右节点
				root=nodeStack.peek().right;
				nodeState.pop();//更改状态值 由0变1  
				nodeState.push(1);
			}
		 }
		 return res;
		
		
		
	        
	    }


java实现二叉树的创建及5种遍历

用java实现的数组创建二叉树以及先序遍历,中序遍历,后序遍历三种遍历
  • ls5718
  • ls5718
  • 2016年04月23日 15:52
  • 2530

【LeetCode】145. Binary Tree Postorder Traversal 解题报告

转载请注明出处:http://blog.csdn.net/crazy1235/article/details/51471280Subject 出处:https://leetcode.com/pro...

LeetCode(145)Binary Tree Postorder Traversal

题目如下: Given a binary tree, return the postorder traversal of its nodes' values. 1 \ 2 ...

leetcode刷题, 总结,记录,备忘145

leetcode145 Binary Tree Postorder Traversal   Given a binary tree, return the postorder t...

LeetCode145 Binary Tree Postorder Traversal(迭代实现) Java

题目: Given a binary tree, return the postorder traversal of its nodes’ values.For example: Given bi...

LeetCode 145 Binary Tree Postorder Traversal(二叉树的后续遍历)+(二叉树、迭代)

翻译给定一个二叉树,返回其后续遍历的节点的值。例如: 给定二叉树为 {1, #, 2, 3} 1 \ 2 / 3 返回 [3, 2, 1]备注:用递归是微不足道的...
  • NoMasp
  • NoMasp
  • 2016年03月19日 22:34
  • 2977

LeetCode 145. Binary Tree Postorder Traversal (非递归和递归解)

非递归的话,用一个栈维护深搜。 每访问一个结点, 若该结点未被访问过:...

LeetCode题解-145-Binary Tree Postorder Traversal

尽管写LeetCode解答主要是为了自己整理思路,但是如果对您也正好有帮助,请点个赞给菜鸟一点鼓励吧 :-) 原题 解法概览 解法1为递归; 解法2位迭代。 解法...

Binary Tree Postorder Traversal 二叉树的后序遍历(迭代非递归版本)

下面来讲讲迭代版本的二叉树后序遍历。 首先,我们先来造一个二叉树,先自己模拟一下后序遍历。 为了便于理解,我在之前的中序遍历的树上进行了扩展。...

LeetCode 145: Binary Tree Postorder Traversal(二叉树的后序遍历,迭代法)

leetcode 145. Binary Tree Postorder Traversal     Total Accepted: 96378 Total Submissions: 271797...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LeetCode145 Binary Tree Postorder Traversal Java题解(递归 迭代)
举报原因:
原因补充:

(最多只允许输入30个字)