JavaDS--二叉树的还原详解

根据一棵树的前序遍历与中序遍历构造二叉树
力扣链接
1.从前序遍历结果中取树根节点中的内容
2.在中序遍历结果中找到根的位置pos,然后将中序数据分割成左右两半部分
[left,pos) [pos+1,right)
3.创建根节点

  • 递归创建根节点的左子树
  • 递归创建根节点的右子树
class Solution {
    int index=0;
    //[left,right)
    private TreeNode reBuilidTree(int[] preorder,int[] inorder, int left,int right){
        if(left>=right || index >= preorder.length){
            return null;
        }
        //前序中找根节点
        //创建根节点
        TreeNode root =new TreeNode(preorder[index]);

        //在中序遍历结果中找根的位置
        //确认根节点的左右子树的区别
        int inrootIdx=left;
        while(inrootIdx<right){
            if(inorder[inrootIdx] == preorder[index])
                break;
            inrootIdx++;
        }
        ++index;
        //递归创建根节点的左子树
        root.left=reBuilidTree(preorder,inorder,left,inrootIdx);

        //递归创建根节点的右子树
        root.right=reBuilidTree(preorder,inorder,inrootIdx+1,right);

        return root;
    }
    public TreeNode buildTree(int[] preorder, int[] inorder) {
        index=0;
        return reBuilidTree(preorder,inorder,0,inorder.length);
    }
}

根据一棵树的中序遍历与后序遍历构造二叉树
力扣链接
1.从后序遍历结果中取数的根节点中的值域
2.在中序遍历结果中找根节点的位置rootidx,可以将中序遍历结果划分为左右两部分

  • 左子树中的节点数据:[left,rootidx)
  • 右子树中的节点数据:[rootidx+1,right)
    3.创建根节点
  • 递归创建根节点的左子树
  • 递归创建根节点的右子树
class Solution {
    int index = 0;
    private TreeNode buildTree(int[] inorder, int[] postorder,int left,int right) {
        if(left>=right || index<0){
            return null;
        }


        int inrootidx=left;
        while(inrootidx<right){
            if(inorder[inrootidx]==postorder[index])
                break;
            ++inrootidx;
        }

        TreeNode root=new TreeNode(postorder[index]);
        --index;
        //右
        root.right=buildTree(inorder,postorder,inrootidx+1,right);
        //左
        root.left=buildTree(inorder,postorder,left,inrootidx);
        return root;
    }
    public TreeNode buildTree(int[] inorder, int[] postorder){
        index=postorder.length-1;
        return buildTree(inorder,postorder,0,inorder.length);
    }
}

你可能感兴趣的:(笔记)