输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
来源:互联网 发布:iphone和ipad软件同步 编辑:程序博客网 时间:2024/05/16 16:05
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
二叉树
遍历即将树的所有结点访问且仅访问一次。按照根节点位置的不同分为前序遍历,中序遍历,后序遍历。
前序遍历:根节点->左子树->右子树中序遍历:左子树->根节点->右子树后序遍历:左子树->右子树->根节点
public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; }}import java.util.ArrayList;import java.util.List;public class lesson4 { public static void main(String[] args){ int[] pre = {1,2,4,7,3,5,6,8}; int[] in = {4,7,2,1,5,3,8,6}; TreeNode treeNode = reConstructBinaryTree(pre,in); printTreeNode(treeNode); } private static void printTreeNode(TreeNode treeNode) { if(treeNode != null){ System.out.print(treeNode.val + " "); TreeNode left = treeNode.left; printTreeNode(left); TreeNode right = treeNode.right; printTreeNode(right); } } public static TreeNode reConstructBinaryTree(int [] pre,int [] in) { print(pre, in); TreeNode root = null; if(pre != null && pre.length > 0){ root = new TreeNode(pre[0]); } //根据中序,找到左边的数组 if(in != null && in.length > 0){ List<Integer> inLeftList = new ArrayList(); List<Integer> inRightList = new ArrayList(); //分解后序遍历数组 int[] inLeftChild = null, inRightChild = null; boolean find = false; for(int i = 0; i < in.length; i ++){ if(in[i] == pre[0]){//找到了 find = true; }else if(!find){ inLeftList.add(in[i]); }else if(find){ inRightList.add(in[i]); } } inLeftChild = getIntArray(inLeftList); inRightChild = getIntArray(inRightList); //分解前序遍历数组 int[] preLeftChild = null, preRightChild = null; int leftCount = 0, rightCount = 0; if(inLeftChild != null && inLeftChild.length > 0){ leftCount = inLeftChild.length; if(preLeftChild == null){ preLeftChild = new int[leftCount]; } } if(inRightChild != null && inRightChild.length > 0){ rightCount = inRightChild.length; if(preRightChild == null){ preRightChild = new int[rightCount]; } } for(int i = 1; i < pre.length; i ++){ int value = pre[i]; if(i <= leftCount){ preLeftChild[i - 1] = value; }else if(i >= leftCount + 1 && i <= leftCount + rightCount){ preRightChild[i - leftCount - 1] = value; } } root.left = reConstructBinaryTree(preLeftChild, inLeftChild); root.right = reConstructBinaryTree(preRightChild, inRightChild); } return root; } private static void print(int[] pre, int[] in) { if(pre == null && in == null)return; // TODO Auto-generated method stub System.out.print("pre "); if(pre != null && pre.length > 0){ for(int i = 0; i < pre.length; i ++){ System.out.print(pre[i] + " "); } } System.out.print(" in "); if(in != null && in.length > 0){ for(int i = 0; i < in.length; i ++){ System.out.print(in[i] + " "); } } System.out.println(""); System.out.println("-----------------------------------------"); } private static int[] getIntArray(List<Integer> list) { // TODO Auto-generated method stub if(list != null && list.size() > 0){ int[] array = new int[list.size()]; for(int i = 0; i < list.size(); i++){ array[i] = list.get(i); } return array; } return null; }}
打印结果:
pre 1 2 4 7 3 5 6 8 in 4 7 2 1 5 3 8 6 -----------------------------------------pre 2 4 7 in 4 7 2 -----------------------------------------pre 4 7 in 4 7 -----------------------------------------pre 7 in 7 -----------------------------------------pre 3 5 6 8 in 5 3 8 6 -----------------------------------------pre 5 in 5 -----------------------------------------pre 6 8 in 8 6 -----------------------------------------pre 8 in 8 -----------------------------------------1 2 4 7 3 5 6 8
阅读全文
0 0
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5
- java 剑指offor 第四题:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}
- 重建二叉树:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
- 输入某二叉树的前序遍历和中序遍历的结果重建出该二叉树。设输入的前序遍历和中序遍历的结果中都不含重复的数字。如输前序{1,2,4,7,3,5,6,8}和中序{4,7,2,1,5,3,8,6},则重建。
- 重建二叉树,输入某二叉树的前序遍历和中序遍历的结果,重建出二叉树,假设输入的前序和中序遍历结果中不含重复的数字
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。
- 输入某二叉树的前序遍历和中序遍历的结果请重建出该二叉树。
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。
- 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。
- 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。
- tomcat配置https协议(SSL机制)
- Java并发编程实战(学习笔记 十三 第十四章 构建自定义的同步工具 下 )
- JQuery 动画
- Oracle
- JS练习(3)
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
- Rikka with Candies HDU
- 关于ffmpeg,av_read_frame函数返回值小于0的错误
- Android studio修改项目(工程)的包名,并保证所有文件导入的R文件正确
- xListView的主方法
- 简单通讯录
- Fibonacci (公式,数学)
- Codeforces Gym 100642 C D F
- Java菜鸟学习日记32