根据二叉树的前中序遍历输出二叉树

首先给定两个数组pre[] 和 in[],里面分别存着给定二叉树的前序遍历和中序遍历,下面我们来分析:

  1. 根据前序遍历的特点,前序遍历的第一个节点便是二叉树的头结点head;
  2. 头结点后紧接着的元素便是头结点的左子树,即head.left;
  3. 根据中序遍历的特点,头结点后紧接的元素便是头结点的右子树,即head.right;
  4. 根据这个特点,我们便通过递归来完成这个过程

 

public class TreeNode {
      int val;
      TreeNode left;
      TreeNode right;

      TreeNode(int x) {
          val = x;
      }
}
 public static TreeNode buildTree(int[] preorder, int[] inorder) {
        TreeNode head = test(preorder,inorder,0,preorder.length-1,0,inorder.length-1);
        return head;
    }
    public static TreeNode test(int[] pre, int[] in,int pl,int pr,int il,int ir){
        System.out.println(pl+" "+pr+" "+il+" "+ir);
        if(pl > pr){ //递归退出条件
            return null;
        }else if( pl == pr){
            return new TreeNode(pre[pl]);
        }
        int index = pl;
        TreeNode head = new TreeNode(pre[pl]);//头结点后紧接的元素便是head的左?右 子树
        for(int i = index ; i <= ir; i++){
            if(pre[pl] == in[i]){ //寻找头节点
                head.left = test(pre,in,   pl+1    ,pl+i-il   , il ,  i-1);
                head.right = test(pre, in ,pl+i-il+1 ,  pr,     i+1,     ir);
                break;
            }
        }
        return head;
    }

 

 


版权声明:本文为qq_38370372原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。