/** * 用先序数组和中序数组重建一棵树 */ public class ConstructBinaryTreeFromPreorderAndInorderTraveral { public static class TreeNode { public int val; public TreeNode left; public TreeNode right; TreeNode(int val) { this.val = val; } } public static TreeNode buildTree(int[] pre, int[] in) { if (pre == null || in == null || pre.length != in.length) { return null; } return f(pre, 0, pre.length - 1, in, 0, in.length - 1); } //有一棵树,先序结果是pre[l1...r1],中序in[l2...r2] //建成一棵树返回头节点 public static TreeNode f(int[] pre, int l1, int r1, int[] in, int l2, int r2) { if (l1 > r1) {//左树为空或者佑树为空 return null; } TreeNode head = new TreeNode(pre[l1]); if (l1 == r1) { return head; } int find = l2; for (; in[find] != pre[l1]; find++) ; head.left = f(pre, l1 + 1, l1 + (find - l2), in, l2, find - 1); head.right = f(pre, l1 + (find - l2) + 1, r1, in, find + 1, r2); return head; } }
用先序数组和中序数组重建一棵树
最新推荐文章于 2024-10-14 00:00:00 发布
该博客介绍了如何通过给定的先序遍历和中序遍历数组来重建一棵二叉树。它提供了一个名为`ConstructBinaryTreeFromPreorderAndInorderTraversal`的Java类,包含一个`buildTree`方法作为主要实现,以及一个辅助的`f`方法,用于递归地构造树的左右子节点。这种方法依赖于先序遍历中根节点的位置来划分中序遍历的子序列。
摘要由CSDN通过智能技术生成