重建二叉树
来源:互联网 发布:农村淘宝县级运营中心 编辑:程序博客网 时间:2024/05/22 03:20
输入前序遍历和中序遍历的序列,然后通过这两个序列构建出二叉树。
C语言代码如下:
typedef struct binary_tree_node{ int value; struct binary_tree_node *left; struct binary_tree_node *right;}bt_node;bt_node * construct(int *preorder, int *inorder, int length){ if (preorder == NULL || inorder == NULL || length <= 0){ printf("[%s][%d] param is illegal\n",__FUNCTION__,__LINE__); return NULL; } return construct_core(preorder, preorder + length - 1, inorder, inorder + length - 1);}bt_node *construct_core(int *start_preorder, int *end_preorder, int *start_inorder, int *end_inorder){ // preorder first number is the value of root int root_value = start_preorder[0]; int *root_inorder = NULL; int left_length = 0; int *left_preorder_end = NULL; bt_node *root = malloc(sizeof(bt_node)); if (NULL == root){ printf("[%s][%d] malloc memory failed.\n",__FUNCTION__,__LINE__); return NULL; } root->value = root_value; root->left = NULL; root->right = NULL; if (start_preorder == end_preorder){ if (start_inorder == end_inorder) return root; else{ printf("[%s][%d] invalid input!!!\n",__FUNCTION__,__LINE__); } } // find root valude in inorder list. root_inorder = start_inorder; while (root_inorder <= end_inorder && *root_inorder != root_value) ++root_inorder; if (root_inorder == end_inorder && *root_inorder != root_value) printf("[%s][%d] invalid input!!!\n",__FUNCTION__,__LINE__); left_length = root_inorder - start_inorder; left_preorder_end = start_preorder + left_length; if (left_length > 0){ //construct left subtree root->left = construct_core(start_preorder+1, left_preorder_end, start_inorder, root_inorder - 1); } if (left_length < end_preorder - start_preorder){ // construct right subtree root->right = construct_core(left_preorder_end + 1, end_preorder, root_inorder + 1, end_inorder); } return root;}
参考: [1]剑指offer名企面试官精讲典型编程题
阅读全文
0 0
- 3.9重建二叉树
- 重建二叉树
- 二叉树重建
- 二叉树重建
- 二叉树的重建
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 二叉树重建
- 二叉树重建
- 重建二叉树
- 重建二叉树
- 重建二叉树
- Zookeeper实现参数的集中式管理
- Spring boot入门一 环境搭建HelloWorld
- 实例详解Unity各种坐标的转换
- ubuntu16.04下面使用redshift
- 着色器glsl
- 重建二叉树
- 李沐等:MXNet设计和实现简介
- Hashmap踩坑
- ubuntu16.04使用nginx、uwsgi部署django应用
- nginx 502 解决记录(php-fpm 启动失败)
- 《笨办法学python》加分习题26——我的答案
- linux NetworkManager和networking 冲突网络跳线
- 收获,不止SQL优化——抓住SQL的本质--第一章
- 关于JS中的constructor与prototype的总结