重建二叉树

来源:互联网 发布:大数据产业园怎么样 编辑:程序博客网 时间:2024/05/19 13:17

题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序表里和中序遍历的结果中不含有重复的数字。

/*** * 根据一个二叉树的前序和中序遍历序列将其重建出来 * @author Administrator * */public class BuildTree {class TreeNode {TreeNode left;TreeNode right;int value;public TreeNode(int value) {this.value = value;}}public TreeNode buildTree(int[] preorder, int pbegin, int pend, int[] inorder, int ibegin, int iend) {TreeNode root = null;if (pbegin == pend || ibegin == iend)return root;else {root = new TreeNode(preorder[pbegin]);int i = ibegin;for (; i < iend; i++) {if (inorder[i] == preorder[pbegin])break;}root.left = buildTree(preorder, pbegin + 1, pbegin + i + 1 - ibegin, inorder, ibegin, i);root.right = buildTree(preorder, pbegin + i + 1 - ibegin, pend, inorder, i + 1, iend);}return root;}}
前序遍历序列的第一个数即为根节点的值。对中序序列进行扫描,找到和这个值相等的数,可以确定根节点的位置,这个位置左边是根节点的左子树,右边是根节点的右子树,由此可以分别得到左右子树的前序遍历、中序遍历序列,可以通过递归完成整个树的构建。

0 0
原创粉丝点击