由先序遍历和中序遍历构造二叉树的二叉链表代码
来源:互联网 发布:js中join的用法 编辑:程序博客网 时间:2024/05/16 10:03
转载自:http://blog.csdn.net/sunmeng_007/article/details/8095224
#include<stdio.h>#include<stdlib.h>#include<malloc.h>#include<string.h>//定义节点typedef struct btnode{ char value; struct btnode *left; struct btnode *right;}btnode;//该函数的作用是:返回在中序遍历序列数组中根节点的下标//函数的第一个参数是前序遍历序列数组//函数的第二个参数是中序遍历序列数组//函数的第三个参数是前序遍历序列与中序遍历序列的长度int get_root_idx(char *preorder, char *inorder, int n){ int i; char ch; //该循环的初始化操作包括了把ch赋值为preorder[]数组的首个元素 //因为preorder[]的首个元素是根节点 for(i=0, ch=preorder[0]; i<n; i++) if(inorder[i]==ch) return i; return -1;}//根据先序遍历序列和中序遍历序列建立二叉树链表//btnode *build_from_preorder_and_inorder(前序遍历数组,中序遍历数组, 数组长度)btnode *build_from_preorder_and_inorder(char *preorder, char *inorder, int n){ //如果表长为0,return NULL if(n==0) return NULL; //根节点的值即为前序遍历数组的第一个元素 int root_val = preorder[0]; //找到中序遍历序列数组中根节点的下标 int i = get_root_idx(preorder, inorder, n); //为二叉树链表建立根节点 btnode *root = (btnode*)malloc(sizeof(btnode)); //为根节点赋值 root->value = root_val; //构造根节点的左子树 root->left = build_from_preorder_and_inorder(preorder+1, inorder, i); //构造根节点的右子树 root->right = build_from_preorder_and_inorder(preorder+i+1, inorder+i+1, n-i-1); //返回根节点 return root;}//后续遍历打印二叉树链表void postorder(btnode *root) { if(root) { postorder(root->left); postorder(root->right); printf("%c", root->value); } } int main(){ //char *preorder = "ABDEGCFH"; //char *inorder = "DBEGAHFC";//char *preorder = "ABEKLFGMCHDIJ"; //char *inorder = "KLEFMGBHCIJDA"; char *preorder = "GCABFED"; char *inorder = "ACBGDEF";int n = strlen(preorder); btnode *root = build_from_preorder_and_inorder(preorder, inorder, n); postorder(root); printf("\n"); return 0;}
0 0
- 由先序遍历和中序遍历构造二叉树的二叉链表代码
- JS中由先序遍历和中须遍历构造二叉树
- 代码实现 由二叉树的先序遍历和中序遍历推出后序遍历
- JAVA二叉树,给出先序遍历和中序遍历,构造出新的二叉树
- 数组实现根据二叉树的先序遍历和中序遍历构造二叉树
- 由二叉树中序遍历和先序遍历,构造二叉树,经过镜面翻转后输出层次遍历结果
- 二叉树的遍历代码(先序遍历,中序遍历,后序遍历)
- 二叉树的先序遍历、中序遍历、后续遍历和二叉树还原
- 二叉树3(构造二叉树、先序遍历、中序遍历、后序遍历)
- 由先序遍历和中序遍历建立二叉树
- 二叉树的遍历(篇5)由中序和先序序列重建二叉树
- 通过中序遍历和先序遍历结果构造二叉树
- 数据结构实验 已经先序遍历和中序遍历,构造一个二叉树
- 通过树的先序和中序遍历序列来构造二叉树
- 先序遍历和中序遍历创建二叉树
- 中序遍历和先序遍历构建二叉树
- 根据二叉树的先序遍历和中序遍历建立二叉树
- 根据二叉树的先序遍历和中序遍历重构二叉树
- lesson 2 hbase install on hadoop
- cppTest-3.0:指针相关-3(指针与函数)
- 6410安卓移植Failed to execute /init. Attempting defaults...
- linux kernel panic解决思路
- 常用EXE文件反编译工具
- 由先序遍历和中序遍历构造二叉树的二叉链表代码
- Windows XP + Apache 2.2.4 + PHP 5.2.3 + MySQL 5.0.27 + Zend Optimizer 3.3.0 Windows XP + Apache + PH
- cppTest-3.0:指针相关-4(字符串函数)
- asp.net mvc 3.0详细笔记__05__项目文件结构详解_Views
- cppTest-3.0:指针相关-x(指针运算)
- [LeetCode]Valid Parentheses
- VC下线程安全退出的方法----百度文章
- Linux驱动开发经典书籍
- 现控-控制系统的状态空间描述