每日算法之重建二叉树

[复制链接]
发表于 2022-11-26 11:15:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
JZ7重建二叉树

描述
  1. 给定节点数为 n 的二叉树的前序遍历和中序遍历结果,请重建出该二叉树并返回它的头结点。
  2. 例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6}
  3. 提示:
  4. 1.vin.length == pre.length
  5. 2.pre 和 vin 均无重复元素
  6. 3.vin出现的元素均出现在 pre里
  7. 4.只需要返回根结点,系统会自动输出整颗树做答案对比
复制代码
具体做法:
  1. step 1:先根据前序遍历第一个点建立根节点。
  2. step 2:然后遍历中序遍历找到根节点在数组中的位置。
  3. step 3:再按照子树的节点数将两个遍历的序列分割成子数组,将子数组送入函数建立子树。
  4. step 4:直到子树的序列长度为0,结束递归。
复制代码
代码
  1. package mid.JZ7重建二叉树;
  2. import java.util.*;
  3. class TreeNode {
  4.     int val;
  5.     TreeNode left;
  6.     TreeNode right;
  7.     TreeNode(int x) {
  8.         val = x;
  9.     }
  10. }
  11. public class Solution {
  12.     public TreeNode reConstructBinaryTree(int[] pre, int[] vin) {
  13.         int n = pre.length;
  14.         int m = vin.length;
  15.         if (n == 0 || m == 0) return null;
  16.         //前序遍历第一个为根节点
  17.         TreeNode root = new TreeNode(pre[0]);
  18.         for (int i = 0; i < vin.length; i++) {
  19.             if (pre[0] == vin[i]) {
  20.                 //左子树
  21.                 root.left = reConstructBinaryTree(Arrays.copyOfRange(pre, 1, i + 1), Arrays.copyOfRange(vin, 0, i));
  22.                 root.right = reConstructBinaryTree(Arrays.copyOfRange(pre, i + 1, pre.length), Arrays.copyOfRange(vin, i + 1, vin.length));
  23.                 break;
  24.             }
  25.         }
  26.         return root;
  27.     }
  28. }
复制代码
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表