输入先序和中序构造二叉树
来源:互联网 发布:信欣美妆淘宝店假货 编辑:程序博客网 时间:2024/05/22 15:12
public static TreeNode reConstructTreeNode(int[] pre,int[] in) { //获取节点的根 int rootVal = pre[0]; //定义一个节点,将根节点值赋值给构造的节点 TreeNode treeNode = new TreeNode(rootVal); //获取根的左子树的中序 ArrayList<Integer> li = new ArrayList<Integer>(); int rootPos = 0; for (int i = 0; rootVal != in[i] ; i++) { rootPos ++; li.add(in[i]); } //获取根的右子树的中序 ArrayList<Integer> ri = new ArrayList<Integer>(); for (int i = rootPos + 1; i < in.length; i++) { ri.add(in[i]); } //获取根的左子树的先序 ArrayList<Integer> lp = new ArrayList<Integer>(); for (int i = 1; i < rootPos + 1; i++) { lp.add(pre[i]); } //获得根的右子树的先序 ArrayList<Integer> rp = new ArrayList<Integer>(); for (int i = rootPos + 1; i < pre.length; i++) { rp.add(pre[i]); } if(lp.size() == 0 || li.size() == 0) { treeNode.leftTree = null; } else if(rp.size() == 0 || rp.size() == 0) { treeNode.rightTree = null; } //若左右子树都不为空 if(lp.size() != 0) { //左先序赋值给数组 int[] lpArr = new int[lp.size()]; for (int i = 0; i < lpArr.length; i++) { lpArr[i] = lp.get(i); } //左中序赋值给数组 int[] liArr = new int[li.size()]; for (int i = 0; i < liArr.length; i++) { liArr[i] = li.get(i); } //右先序赋值给数组 int[] rpArr = new int[rp.size()]; for (int i = 0; i < rpArr.length; i++) { rpArr[i] = rp.get(i); } //右先序赋值给数组 int[] riArr = new int[ri.size()]; for (int i = 0; i < riArr.length; i++) { riArr[i] = ri.get(i); } treeNode.leftTree = reConstructTreeNode(lpArr, liArr); } if(rp.size() != 0) { //左先序赋值给数组 int[] lpArr = new int[lp.size()]; for (int i = 0; i < lpArr.length; i++) { lpArr[i] = lp.get(i); } //左中序赋值给数组 int[] liArr = new int[li.size()]; for (int i = 0; i < liArr.length; i++) { liArr[i] = li.get(i); } //右先序赋值给数组 int[] rpArr = new int[rp.size()]; for (int i = 0; i < rpArr.length; i++) { rpArr[i] = rp.get(i); } //右先序赋值给数组 int[] riArr = new int[ri.size()]; for (int i = 0; i < riArr.length; i++) { riArr[i] = ri.get(i); } treeNode.rightTree = reConstructTreeNode(rpArr, riArr); } return treeNode; }
节点的类:
class TreeNode{ int Val; TreeNode leftTree; TreeNode rightTree; TreeNode(int Val) { this.Val = Val; } }
0 0
- 输入先序和中序构造二叉树
- 二叉树构造 (已知先序 和中序)
- 先序和后序构造二叉树,后序和中序构造二叉树
- 先序序列和中序序列构造二叉树,中序序列和后序序列构造二叉树
- JAVA二叉树,给出先序遍历和中序遍历,构造出新的二叉树
- 数组实现根据二叉树的先序遍历和中序遍历构造二叉树
- 由先序遍历和中序遍历构造二叉树的二叉链表代码
- JS中由先序遍历和中须遍历构造二叉树
- 根据先序 中序构造二叉树
- 由先序和中序构造二叉树并后序输出
- 由先序序列/后序序列和中序序列构造二叉树
- 通过树的先序和中序遍历序列来构造二叉树
- 通过中序遍历和先序遍历结果构造二叉树
- 根据先序序列和中序序列构造二叉树
- 数据结构实验 已经先序遍历和中序遍历,构造一个二叉树
- 给定先序和后续,构造出一颗二叉树并输出中序序列
- 通过先序和中序遍历序列来构造二叉树
- 第十一周项目2 二叉树构造算法--先序序列和中序序列构造算法
- 【Android】HTTP里的线程问题
- db2 专用工具 版本设置sql自动提示
- Java 加密解密 对称加密算法 非对称加密算法 MD5 BASE64 AES RSA
- 统计同成绩学生人数
- 如何在android应用程序中启动其他apk程序,被启动程序退出后返回之前的程序?
- 输入先序和中序构造二叉树
- jQuery formValidator的一些验证实例
- CSU1256(天朝的单行道)
- C#操作注册表建立文件关联
- win7 64 位下Navicat11.1.8 (64位) for oracle11g r2 提示 cannot load OCI DLL,126 193的解决方法
- Android学习0817<一>(Android环境搭建)
- iOS开发 -- 屏幕旋转
- Linux学习记录(4)系统常用命令学习
- Java.lang.String 类常用方法