由二叉树前序和中序遍历生成二叉树
来源:互联网 发布:上海的美食知乎 编辑:程序博客网 时间:2024/05/16 12:15
- 由二叉树前序和中序遍历生成二叉树自己用java实现的,功能没问题,效率可能不是很好
- 基本思想就是根据前序第一个节点即是根节点,然后在中序中找到根节点位置,则中序的根节点左边就是根节点的左子树的中序序列,右边是根节点的右子树中序序列;根据左子树的节点个数再在前序中确定左子树的前序序列和右子树的前序序列,最后递归调用左右子树序列
//二叉树定义class Btree {int value;Btree leftBtree;Btree rightBtree;}//根据前序和中序的遍历序列生成二叉树函数,返回根节点public Btree MakeBtree(int[] preOrder , int[] inOrder){int[] leftPreOrder , rightPreOrder,leftInOrder ,rightInOrder; //根节点的左右子树遍历序列if(preOrder == null || inOrder == null)return null;int rootNode = preOrder[0];Btree root = new Btree();root.value = rootNode;if(preOrder.length == inOrder.length && inOrder.length == 1)return root;int i = 0 ;//在中序中查找根节点的位置while(i < inOrder.length){if(rootNode == inOrder[i])break;i++;}//即没有左子树情况if(i == 0){ rightInOrder = new int[inOrder.length - 1];rightPreOrder = new int[inOrder.length - 1];for(int j = 0 ; j < inOrder.length - 1 ; j++){rightInOrder[j] = inOrder[j+1];rightPreOrder[j] = preOrder[j+1];}root.leftBtree = null;root.rightBtree = MakeBtree(rightPreOrder, rightInOrder);return root;}//没有右子树情况else if(i == inOrder.length - 1){leftInOrder = new int[inOrder.length - 1];leftPreOrder = new int[inOrder.length - 1];for(int j = 0 ; j < inOrder.length - 1 ; j++){leftInOrder[j] = inOrder[j];leftPreOrder[j] = preOrder[j + 1];}root.rightBtree = null;root.leftBtree = MakeBtree(leftPreOrder, leftInOrder);return root;}else{ //找出左右子树的前序和中序遍历序列,递归调用leftInOrder = new int[i];leftPreOrder = new int[i];for(int j = 0 ; j < i ; j++){leftInOrder[j] = inOrder[j];leftPreOrder[j] = preOrder[j+1];}rightInOrder = new int[inOrder.length - (i + 1)];rightPreOrder = new int[inOrder.length - (i + 1)];for(int j = i + 1 ,k=0; j < inOrder.length; j++,k++){rightInOrder[k] = inOrder[j];rightPreOrder[k] = preOrder[j];}root.rightBtree = MakeBtree(rightPreOrder, rightInOrder);root.leftBtree = MakeBtree(leftPreOrder, leftInOrder);}return root;}
0 0
- 由二叉树前序和中序遍历生成二叉树
- 由二叉树先序遍历/后序遍历和中序遍历生成二叉树
- 已知二叉树先序和中序遍历,生成二叉树
- 【二叉树】由前序遍历和中序遍历重建二叉树
- 二叉树--由前序遍历和中序遍历重建二叉树
- 由先序遍历和中序遍历构造二叉树的二叉链表代码
- 二叉树--由中序遍历和后续遍历重建二叉树
- 由二叉树的先序和中序遍历生成二叉树的层序和后序遍历结构
- 由二叉树的中序遍历和前序遍历求二叉树重建二叉树
- 阿里笔试-二叉树由前序遍历和中序遍历推导后序遍历
- 二叉树 由中序遍历和前序遍历推后序遍历
- 由二叉树的前序遍历序列和中序遍历序列求后序遍历序列
- 由二叉树的前序遍历和中序遍历来求后序遍历的结果
- 由前序遍历和中序遍历重建二叉树,再实现后续遍历
- JS中由先序遍历和中须遍历构造二叉树
- 由前序和中序遍历建立二叉树并后序遍历输出二叉树
- 二叉树(14)----由前序遍历和中序遍历重建二叉树,递归方式
- 二叉树(15)----由中序遍历和后序遍历重建二叉树,递归方式
- Poj 1611 The Suspects
- hdu 1686 Oulipo(kmp)
- 提升tomcat服务器性能的七条经验
- Java4Android-包和访问权限2
- HDU 4323
- 由二叉树前序和中序遍历生成二叉树
- hdoj.1295 Move Move Look【水题】 2015/08/06
- sql触发器(insert,update,delete)
- 【Cocos2d入门教程三】HelloWorld之一目了然
- iOS开发课程免费得
- MySQL基础语句
- HTML <a> 标签 (修改样式,链接邮箱Email地址)
- 矩形覆盖
- 16. Element contentEditable 属性