栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Java

【树】--重建二叉树

Java 更新时间:发布时间: 百科书网 趣学号
题目: 根据二叉树的前序遍历和中序遍历的结果,重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
分析
  • 前序遍历顺序:根节点->左子节点->右子节点
  • 中序遍历顺序:左子节点->根节点->右子节点

前序中的第一个元素能把中序分成两部分,然后对左右两部分做同样操作,必然使用递归方法,递归出口,在最后只有一个元素,递归结束


思路


源码
package org.example.tree;

import org.example.model.TreeNode;

import java.util.Arrays;


public class practiceTree01 {

    

    
     public TreeNode reConstructBinaryTree(int[] pre,int[] ino){

         if (pre.length==0){
             return null;
         }
         
         //前序第一个元素
         int rootVal = pre[0];

         //将中序分成左右子树两部分
         TreeNode treeNode = new TreeNode(rootVal);
         int rootIndex=0;
         for (int i = 0; i < ino.length; i++) {
             if (rootVal==ino[i]){
                 rootIndex=i;
                 break;
             }
         }

         //左子树
           //前序 copyOfRange 范围0<=X<10
         Arrays.copyOfRange(pre, 1, rootIndex + 1);
           //中序
         Arrays.copyOfRange(ino, 0, rootIndex );
         treeNode.setLeftNode(reConstructBinaryTree(Arrays.copyOfRange(pre, 1, rootIndex + 1),Arrays.copyOfRange(ino, 0, rootIndex )));

         //同理右子树
         Arrays.copyOfRange(pre, rootIndex + 1, pre.length);
         Arrays.copyOfRange(ino, rootIndex+1, ino.length );
         treeNode.setRightNode(reConstructBinaryTree(Arrays.copyOfRange(pre, rootIndex + 1, pre.length),Arrays.copyOfRange(ino, rootIndex+1, ino.length )));

         return treeNode;
     }



}


转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/888805.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号