二叉树的构建 遍历 以及 根据 先序遍历 中序遍历 来构建二叉树
来源:互联网 发布:阿里云 连接 腾讯云 编辑:程序博客网 时间:2024/05/23 00:39
package binRela;import java.util.Arrays;/** * @Author GJL * @Desription * @Date 2017/11/23 * @Modified By: **/public class FindAcurateTree { public static BinaryNode rebuildBinaryTree(int[] preOrder,int[] inOrder){ //出口(终止条件) if(preOrder==null||preOrder.length==0||inOrder==null||inOrder.length==0){ return null; } //根据先跟遍历找到跟节点 初始化树 BinaryTree tree = new BinaryTree(preOrder[0]); //在中序遍历找到跟节点的位置i int i = 0; for (; i < inOrder.length; i++) { if(preOrder[0]==inOrder[i]){ break; } } //根据i重新定义左子树lPreOrder lInorder 右子树rPreOrder rInorder int[] lPreOrder = Arrays.copyOfRange(preOrder,1,i+1); int[] lInOrder = Arrays.copyOfRange(inOrder,0,i); int[] rPreOrder = Arrays.copyOfRange(preOrder,i+1,preOrder.length); int[] rInOrder = Arrays.copyOfRange(inOrder,i+1,inOrder.length); tree.root.lNode = rebuildBinaryTree(lPreOrder,lInOrder); tree.root.rNode = rebuildBinaryTree(rPreOrder,rInOrder); return tree.root; } public static void main(String[] args) { /* BinaryTree tree = new BinaryTree(4); tree.addNode(5); tree.addNode(1); tree.addNode(3);*/ int[] preOrder ={4,1,3,5}; int[] inOrder = {1,3,4,5}; BinaryNode binaryNode = rebuildBinaryTree(preOrder,inOrder); BinaryTree.showAllNodes(binaryNode); }/* public static void main(String[] args) { }*/}class BinaryTree{ BinaryNode root; public BinaryTree(int data) { this.root = new BinaryNode(data); } public void addNode(int data){ //构造新加节点 BinaryNode node = new BinaryNode(data); //若未初始化 则新加节点为根节点 if(root == null){ root = node;return;} //获取树 的跟节点 BinaryNode p = root; while(true){ if(p.data>data){ if(p.lNode == null){ p.lNode = node; return; }else{ p = p.lNode; } }else{ if(p.rNode == null){ p.rNode = node; return; }else{ p = p.rNode; } } } } public static void showAllNodes(BinaryNode root){ if(root==null){ return; } //递归调用 完成遍历 System.out.println(root.data); showAllNodes(root.lNode); showAllNodes(root.rNode); }}class BinaryNode{ int data; BinaryNode lNode; BinaryNode rNode; public BinaryNode(int data) { this.data = data; }}
阅读全文
0 0
- 二叉树的构建 遍历 以及 根据 先序遍历 中序遍历 来构建二叉树
- java实现二叉树的构建以及三种遍历方法(先序遍历,中序遍历,后续遍历)
- 中序遍历和先序遍历构建二叉树
- 根据前序遍历,中序遍历构建二叉树
- 根据先序遍历与中序遍历构建二叉树
- [LeetCode]105 根据先序遍历和中序遍历构建二叉树
- 数据结构——根据中序遍历与先序遍历构建二叉树
- 先序遍历构建二叉树 java
- 面试题3:根据先序和中序遍历的结果构建二叉树
- 根据前序遍历和中序遍历构建二叉树以及根据中序遍历后序遍历构建二叉树
- 中序遍历和先序遍历/后序遍历构建二叉树
- 中序遍历和先序遍历/后序遍历构建二叉树
- 中序遍历和先序遍历/后序遍历构建二叉树
- 中序遍历和先序遍历/后序遍历构建二叉树
- 中序遍历和先序遍历/后序遍历构建二叉树
- 中序遍历和先序遍历/后序遍历构建二叉树
- 中序遍历和先序遍历/后序遍历构建二叉树
- 中序遍历和先序遍历/后序遍历构建二叉树
- dubbo通信协议之对比
- 批量开洞
- LeetCode算法题——Maximum Swap
- 拉丁矩阵问题
- JAVA项目中发布WebService服务—简单实例
- 二叉树的构建 遍历 以及 根据 先序遍历 中序遍历 来构建二叉树
- java学习随手记
- spark读取hdfs异常记录
- 20、状态模式(State)
- 大话设计模式读书笔记之单例模式
- 正则表达式 -转义字符
- 房间SDK接入方案(Android)
- 跨平台:utf8与Unicode、string与wstring相互转换【经验】
- IT运维人员避免和应对危机的五种方式