根据中序遍历和前序遍历构建二叉树
来源:互联网 发布:淘宝丝袜4成是男的买的 编辑:程序博客网 时间:2024/04/30 13:06
一下序列组合能唯一确定一棵唯一的二叉树:
- 中序和前序
- 中序和后序
- 中序和层次
下面就来说说通过中序和前序序列构造二叉树:
1、从前序序列中取一个元素,然后将前序序列索引加一(注意将其定义为静态变量)
2、根据所选元素的值,创建一个新的树节点(root)
3、查找所选结点在中序序列中的索引,用遍历tempIndex标记
4、递归调用BuildBinaryTree为tempIndex之前的所有结点构建一棵子树,并将其作为root的左子树
5、递归调用BuildBinaryTree为tempIndex之后的所有结点构建一课子树,并将其作为root的右子树
6、返回root
参数解释:
inOrder:中序序列数组
preOrder:前序序列数组
inStart:在中序遍历中查找所选结点的起始位置
inEnd:在中序遍历序列中查找所选结点的结束位置
代码如下:
@SuppressWarnings("unchecked")public static<T> BinaryTreeNode<T> buildBinaryTree(Object[] inOrder, Object[] preOrder, int inStart, int inEnd){ if(inStart > inEnd){ return null; } T temp = (T)preOrder[preIndex]; preIndex++; // 前序序列索引加一,此变量为静态成员变量,不在方法中 BinaryTreeNode<T> root = new BinaryTreeNode<T>(temp); if(inStart == inEnd){ return root; } int tempindex = 0; for(int i = inStart; i <= inEnd; ++i){ // 查找temp在中序遍历序列中的位置 if((T)inOrder[i] == temp){ tempindex = i; break; } } root.setLeft(buildBinaryTree(inOrder, preOrder, inStart, tempindex-1)); root.setRight(buildBinaryTree(inOrder, preOrder, tempindex+1, inEnd)); return root;}
完整代码可以访问我的GitHub:https://github.com/StriverLi/Data-Structures-and-Algorithms-in-Java/blob/master/src/tree/BinaryTreeNode.java
0 0
- 根据中序和前序遍历构建二叉树
- 根据前序遍历,中序遍历构建二叉树
- 根据前序遍历和中序遍历构建二叉树以及根据中序遍历后序遍历构建二叉树
- 根据前序遍历和中序遍历构建二叉树
- 根据中序遍历和前序遍历构建二叉树
- 根据前序遍历、中序遍历构建二叉树,并后序遍历输出。
- java实现根据前序遍历构建二叉树(前序遍历、中序遍历、后序遍历)
- 根据二叉树的前序遍历和中序遍历构建二叉树的c语言完整代码
- 根据树的前序遍历与中序遍历构建二叉树
- 【二叉树】根据二叉树的中序遍历和前序遍历,还原二叉树
- 根据前序和中序遍历构造二叉树
- 根据前序和中序遍历构造二叉树
- 根据中序和前序遍历重建二叉树
- 根据前序和中序遍历重建二叉树
- 根据前序遍历、中序遍历重建二叉树
- 根据前序遍历中序遍历求二叉树
- 根据前序遍历和后续遍历建立二叉树
- 二叉树 根据前序遍历和中序遍历 或者 后序遍历和中序遍历建树
- 【2015年第六届蓝桥杯C/C++程序设计本科B组省赛 九数组分数(代码填空)】
- 数组操作
- 文字过长,QLabel显示不全的问题,QLabel怎么自动分行显示
- R语言扩展包dplyr——数据清洗和整理
- C++之对象指针
- 根据中序遍历和前序遍历构建二叉树
- python中的集合dict&set
- linux系统触摸板用不了(解决)
- 一个爬虫前的配置及爬虫简示
- PHP curl 超时时间设置
- SET DEFINE OFF prompt
- .net 大型分布式电子商务架构说明
- Linux学习篇之~unit5&unit6练习
- 自定义注解的学习与使用