zoukankan      html  css  js  c++  java
  • 106. 从中序与后序遍历序列构造二叉树

     思路:和105题一样,这次根节点在后续遍历的最后,找到它;之后在中序遍历里找到根节点。Arrays.copyOfRange()函数找出中序数组和后续数组的左右子树序列,递归,构成树,返回根节点。。。不细说了。感觉挺简单。

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution {
        public TreeNode buildTree(int[] inorder, int[] postorder) {
            if(inorder.length>0&&postorder.length>0)
         {
            TreeNode root=new TreeNode(postorder[postorder.length-1]);
            int num=0;//根节点在中序遍历里的下标
            for(int i=0;i<inorder.length;i++)
            {
                if(inorder[i]==root.val)
                    {
                        num=i;//左子树加上根节点有num+1个,左子树上面num个元素,这里注意
                        break;
                    }
            }
               int []inLeft=Arrays.copyOfRange(inorder,0,num);
                int[] inRight=Arrays.copyOfRange(inorder,num+1,inorder.length);
                int []postLeft=Arrays.copyOfRange(postorder,0,num);
                int []postRight=Arrays.copyOfRange(postorder,num,postorder.length-1);
                root.left=buildTree(inLeft,postLeft);
                root.right=buildTree(inRight,postRight);
                return root;
         }
           else
            {
                return null;
            }
        }
    }
    

      

  • 相关阅读:
    4.20 每日一练
    4.19 每日一练
    4.18 每日一练
    Python函数初
    Python的文件操作
    python购物车
    python深浅拷贝,集合以及数据类型的补充
    Python 代码块 小数据池
    Python字典
    Python 列表操作
  • 原文地址:https://www.cnblogs.com/lzh1043060917/p/12836073.html
Copyright © 2011-2022 走看看