重建二叉树

本文介绍了一种通过先序和中序遍历序列重建二叉树的方法,并提供了完整的Java实现代码。该算法利用递归思想,通过匹配序列元素确定根节点,进而划分左右子树,最终构建完整的二叉树结构。此外,还展示了如何使用后序遍历验证构建结果。
摘要由CSDN通过智能技术生成

这里写图片描述


 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==null||in==null||pre.length==0||in.length==0)
      {
            return null;
      }
      TreeNode root=reConstructBinaryTree(pre,0,pre.length-1,in,0,in.length-1);
      return root;
    }
    //采用递归的思想重新构建二叉树
    private TreeNode reConstructBinaryTree(int[]pre,int preStart,int PreEnd,int[]in,int inStart,int inEnd)
    {
          if(preStart>PreEnd||inStart>inStart)
            return null;
          TreeNode root=new TreeNode(pre[preStart]); //第一个为根节点
          for(int i=inStart;i<=inEnd;i++)
          {
                   if(in[i]==pre[preStart]){
                      root.left=reConstructBinaryTree(pre,preStart+1,preStart+i-inStart,in,inStart,i-1);
                      root.right=reConstructBinaryTree(pre,i-inStart+preStart+1,PreEnd,in,i+1,inEnd);
                      break;
                   }
          }
          return root;

    } 

    //二叉树的后序遍历
    public void posTree(TreeNode root)
    {

         if(root!=null)
         {
            posTree(root.left);
            posTree(root.right);
            visit(root);
         }
    }


    public void visit(TreeNode node)
    {
         System.out.print(node.val);
    }
    public static void main(String[]args){
        //System.out.println("Hello");
         int[]pre={1,2,4,7,3,5,6,8};
         int[]in={4,7,2,1,5,3,8,6};
         Solution s=new Solution();
         s.posTree(s.reConstructBinaryTree(pre,in));

    }
}

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值