• 剑指offer-重建二叉树 java实现


    题目描述:

    输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。

    代码实现:

    /**
     * Definition for binary tree
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    public class Solution {
        public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
            if (pre.length==0 || in.length==0 || pre.length!=in.length){
                return null;
            }
            return ConstructBinaryTree(pre,0,pre.length-1,in,0,in.length-1);
        }
        public TreeNode ConstructBinaryTree(int[] pre,int ps,int pe,int[] in ,int is,int ie){
            int value;
            if (ps>pe){
                return null;
            }
            value = pre[ps];
            int index = is;
            while(in[index]!=value && index<=ie){
                index++;
            }
            TreeNode node = new TreeNode(0);
            node.val = value;
            //递归构造左子树
            node.left = ConstructBinaryTree(pre,ps+1,ps+index-is,in,is,index-1);
            //递归构造右子树
            node.right = ConstructBinaryTree(pre,ps+index-is+1,pe,in,index+1,ie);
            return node;
        }
    }

    备注:1.递归的使用,2.数组的界限

  • 相关阅读:
    17. 偏函数
    16. 装饰器
    vim详解
    linux用户管理sudo 磁盘分区
    linux用户管理
    linux文件与目录(四)
    linux特殊权限
    linux文件和目录(二)
    linux文件和目录
    配置网络
  • 原文地址:https://www.cnblogs.com/czwangzheng/p/8391748.html
Copyright © 2020-2023  润新知