zoukankan      html  css  js  c++  java
  • 二叉树的后序遍历

     
    public static ArrayList<Integer> postorderTraversal(TreeNode root) {
         //非空判断
        if(root == null){
               return new ArrayList<Integer>();
           }
        //栈 后进先出
        Stack<TreeNode> stack = new Stack<TreeNode>();
         //返回值
        ArrayList<Integer> list = new ArrayList<Integer>();
        //上一个处理的节点
        TreeNode pre = new TreeNode();
        stack.push(root);
        while(!stack.isEmpty()) {
           //查看栈顶元素
    	  TreeNode t = stack.peek();
              //左孩子为空,右孩子为空,则为叶子节点;或上一个处理节点是当前节点的左孩子或右孩子
    		if((t.left == null && t.right == null)||(pre != null && (t.left == pre || t.right == pre))) {
    			list.add(t.val);
    			pre = t;
    			stack.pop();
    		}else {
                  //先右孩子入栈再左孩子入栈
    			if(t.right != null) {
    				stack.push(t.right);
    			}
    			if(t.left!=null) {
    				stack.push(t.left);
    			}
    	  }
        }
        return list;
    }
    

      

      

    上面的是非递归解法,主要用的是栈,后进先出的特点。

    节点类:

    class TreeNode {
      int val = 0;
      TreeNode left = null;
      TreeNode right = null;
    }
    

      

  • 相关阅读:
    81. Search in Rotated Sorted Array II
    33. Search in Rotated Sorted Array
    26. Remove Duplicates from Sorted Array
    977. Squares of a Sorted Array
    碎片知识
    boost::shared_ptr
    faster-rcnn代码阅读-训练整体流程
    faster-rcnn代码阅读-数据预处理
    进栈与出栈
    jupyter-notebook添加python虚拟环境的kernel
  • 原文地址:https://www.cnblogs.com/jiangym/p/13536383.html
Copyright © 2011-2022 走看看