重建二叉树

题目

  输入某二叉树的前序遍历和中序遍历,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含有重复的数字。

  例如,前序遍历序列:{1,2,3,7,3,5,6,8},中序遍历序列:{4,7,2,1,5,3,8,6}

答案

  前序遍历:

    前序遍历首先访问根结点然后遍历左子树,最后遍历右子树。在遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树。

  中序遍历:

    中序遍历首先遍历左子树,然后访问根结点,最后遍历右子树。在遍历左、右子树时,仍然先遍历左子树,再访问根结点,最后遍历右子树。

#include <iostream>

using namespace std;

struct binary_tree_node{
int value;
binary_tree_node* left;
binary_tree_node* right;
}; binary_tree_node* binary_tree_constuct(int* preorder, int* inorder, int length); int main()
{
int pre[] = {,,,,,,,};
int in[] = {,,,,,,,}; binary_tree_node* root = binary_tree_constuct(pre, in, );
} binary_tree_node* construct_method(int* preorder, int* endpreorder, int* inorder, int* endinorder)
{
int root_value = preorder[];
binary_tree_node* root = new binary_tree_node();
root->left = NULL;
root->right = NULL; cout<<root_value<<" "; if(preorder == endpreorder && inorder == endinorder)
return root; int* rootIndex = preorder;
rootIndex++;
while(*rootIndex != root_value && rootIndex < endpreorder)
rootIndex++; int left_len = rootIndex - preorder;
int* left_preorder_end = preorder + left_len;
//left
if(left_len > )
{
root->left = construct_method(preorder+, left_preorder_end, inorder, rootIndex-);
}
//right
if(left_len < endpreorder - preorder)
{
root->right = construct_method(left_preorder_end+, endpreorder, rootIndex+, endinorder);
} return root;
} binary_tree_node* binary_tree_constuct(int* preorder, int* inorder, int length)
{
if(preorder == NULL || inorder == NULL || length <= )
{
return NULL;
} return construct_method(preorder, preorder+length-, inorder,inorder+length-); }

最新文章

  1. style,currentStyle,getComputedStyle的区别和用法
  2. 系统补丁对sharepoint很重要
  3. Linux Shell编程基础
  4. 在unity3d中使用opencv
  5. DBNull与Null
  6. MSSQL 字符串替换语句
  7. 转:Javascript异步编程的4种方法
  8. [置顶] 老孟 DB2 V9.7 ESE(一)产品部署 基于centOS 6.4
  9. 计算机学院大学生程序设计竞赛(2015’12) 1003 The collector’s puzzle
  10. NOIP模拟:饼干(简单规律推导)
  11. win10 uwp 打包第三方字体到应用
  12. [Swift]LeetCode735. 行星碰撞 | Asteroid Collision
  13. Lodop“对象不支持SET__LICENSES属性或方法”SET__LICENSES is not a function”
  14. 20175227张雪莹 2018-2019-2 《Java程序设计》第六周学习总结
  15. java 集合之Map
  16. web自动化测试(java)---环境搭建
  17. 使用Hadoop API 解压缩 HDFS文件
  18. Swift基础
  19. etl的表输入时精度问题
  20. Mysql数据库二:表的增删改查

热门文章

  1. avalon2学习教程12数据验证
  2. javascript-test1
  3. thinkphp加载 和url_model
  4. vc 中调用COM组件的方法
  5. oc中的枚举定义
  6. okhttp3的使用
  7. 各种 starter poms (启动器)
  8. android之RadioGroup
  9. SWT, JFace必须的jar包和有可能会用到的jar
  10. as 和 is 区别