复原二叉树

Posted midiyu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了复原二叉树相关的知识,希望对你有一定的参考价值。

1.由(preorder+inorder)复原

/*
 * preorder:先序遍历数组
 * ps,pe:先序数组的首元素和末元素的索引
 * inod:中序遍历数组
 * is,ie:中序数组的首元素和末元素的索引 
 */
public class Solution {
    public TreeNode buildTree(int[] preorder, int[] inorder) {
        return buildBT(preorder,0,preorder.length-1,inorder,0,inorder.length-1);
    }
    
    private TreeNode buildBT(int[] preorder,int ps,int pe,int[] inorder,int is,int ie) {
        if(pe<ps)
            return null;
        TreeNode root=new TreeNode(preorder[ps]);
        if(pe==ps)
            return root;
        int middle=0;
        for(int i=is;i<=ie;i++)
            if(inorder[i]==preorder[ps]) {
                middle=i;
                break;
            }
        int len=middle-is;
        root.left=buildBT(preorder,ps+1,ps+len,inorder,is,middle-1);
        root.right=buildBT(preorder,ps+len+1,pe,inorder,middle+1,ie);
        return root;
    }
}

 

 

2.由(inorder+postorder)复原

/**
 * Definition for binary tree
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public TreeNode buildTree(int[] inorder, int[] postorder) {
        return buildBT(inorder, 0, inorder.length-1, postorder, 0, postorder.length-1);
    }
    
    private TreeNode buildBT(int[] inorder,int is,int ie,int[] postorder,int ps,int pe) {
        if(is>ie)
            return null;
        TreeNode root=new TreeNode(postorder[pe]);
        if(pe==ps)
            return root;
        int middle=0;
        for(int i=is;i<=ie;i++)
            if(inorder[i]==postorder[pe]) {
                middle=i;
                break;
            }
        int len=middle-is;
        root.left=buildBT(inorder,is,middle-1,postorder,ps,ps+len-1);
        root.right=buildBT(inorder,middle+1,ie,postorder,ps+len,pe-1);
        return root;
    }
}

 

以上是关于复原二叉树的主要内容,如果未能解决你的问题,请参考以下文章

二叉树复原

leetcode刷题分类笔记

leetcode刷题分类笔记

NC41 最长无重复子数组/NC133链表的奇偶重排/NC116把数字翻译成字符串/NC135 股票交易的最大收益/NC126换钱的最少货币数/NC45实现二叉树先序,中序和后序遍历(递归)(代码片段

北邮数据结构考研——平衡二叉树LR型失衡

二叉数莫里斯遍历