zoukankan      html  css  js  c++  java
  • LeetCode145 Binary Tree Postorder Traversal Java题解(递归 迭代)

    题目:

    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;
    		
    		
    		
    	        
    	    }


  • 相关阅读:
    设计模式之装饰模式
    SpringAOP 失效解决方案、Spring事务失效
    Jmeter测试出现端口占用情况
    ElasticSearch创建动态索引
    Zuul + Ribbon 脱离Eureka完成负载均衡+重试机制
    TCP的三次握手与四次挥手笔记
    Java中的阻塞队列
    Jmeter5.1——聚合报告参数分析
    SpringCloud"灰度部署"——动态刷新网关配置
    JVM学习笔记——类加载过程
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/7122092.html
Copyright © 2011-2022 走看看