数据结构之二叉树建立
来源:互联网 发布:淘宝香港代购可靠吗 编辑:程序博客网 时间:2024/06/10 00:40
树上的笔记记的快满了,随转到博客记录一下。
void CreateBiTree(BiTree *T){TElemType ch;scanf("%c",&ch);if(ch=='#') //#代表这个节点没有子树。*T=NULL;else{*T=(BiTree)malloc(sizeof(BiTNode)); //malloc生成一个内存空间并且强制转化为BiTree类型,类似new的作用。生成一个根节点的内存空间。if(!*T)exit(OVERFLOW);(*T)->data=ch; /* 生成根结点的值 */CreateBiTree(&(*T)->lchild); /* 构造左子树 */CreateBiTree(&(*T)->rchild); /* 构造右子树 */ //函数参数的传递是单向值传递,当我们是需要改变一个指针的值时,就需要用二重指针做参。 //如果我们只传递进去一个一个指向节点的指针,调用结束后,这个指针的值是不会改变的。}}
1.这个方法建立的二叉树是一棵扩展二叉树。每一个节点的左右子树都表示出来,没有的用#表示。
2.这个方法是按前序遍历的方法建立的。所以输入的节点也必须是按照前序遍历的顺序输入的。所以遍历树的方法和建立树的方法是紧密相关的。
3.据作者博客称,中序遍历是无法建立二叉树的,后续遍历也需要满足一定的条件才能建立二叉树。
4.关于方法参数使用二重指针,从整段代码来看,对二叉树的使用,主要是通过调用一个指向根节点的指针来实现的。因为函数传参是单向值传递,所以想改变指针的值的话,则必须传递二重指针才行。
5.整段代码中,对二叉树的使用和创建,主要是通过调用一个指向根节点的指针来实现的。
6.整棵树的建立是通过递归来实现的。
附整段代码:
#include <stdio.h>#include <stdlib.h>#include "math.h"#define OK 1typedef int Status;/* Status是函数的类型,其值是函数结果状态代码,如OK等 */typedef char TElemType;typedef struct BiTNode /* 结点结构 */{ TElemType data;/* 结点数据 */ struct BiTNode *lchild,*rchild; /* 左右孩子指针 */}BiTNode,*BiTree;/* 构造空二叉树T */Status InitBiTree(BiTree *T){*T=NULL;return OK;}/* 初始条件: 二叉树T存在。操作结果: 销毁二叉树T */void DestroyBiTree(BiTree *T){if(*T){if((*T)->lchild) /* 有左孩子 */DestroyBiTree(&(*T)->lchild); /* 销毁左孩子子树 */if((*T)->rchild) /* 有右孩子 */DestroyBiTree(&(*T)->rchild); /* 销毁右孩子子树 */free(*T); /* 释放根结点 */*T=NULL; /* 空指针赋0 */}}/* 按前序输入二叉树中结点的值(一个字符) *//* #表示空树,构造二叉链表表示二叉树T。 */void CreateBiTree(BiTree *T){TElemType ch;scanf("%c",&ch);if(ch=='#') //#代表这个节点没有子树。*T=NULL;else{*T=(BiTree)malloc(sizeof(BiTNode)); //malloc生成一个内存空间并且强制转化为BiTree类型,类似new的作用。if(!*T)exit(OVERFLOW);(*T)->data=ch; /* 生成根结点 */CreateBiTree(&(*T)->lchild); /* 构造左子树 */CreateBiTree(&(*T)->rchild); /* 构造右子树 */ //函数参数的传递是单向值传递,当我们是需要改变一个指针的值时,就需要用二重指针做参。 //如果我们只传递进去一个一个指向节点的指针,调用结束后,这个指针的值是不会改变的。}}//前序遍历void PreOrderTraverse(BiTree T){if(T==NULL)return;printf("%c",T->data);/* 显示结点数据,可以更改为其它对结点操作 */PreOrderTraverse(T->lchild); /* 再先序遍历左子树 */PreOrderTraverse(T->rchild); /* 最后先序遍历右子树 */}int main(){BiTree T;InitBiTree(&T);CreateBiTree(&T);PreOrderTraverse(T);return 0;}
0 0
- 数据结构之二叉树建立
- 数据结构之二叉树(遍历、建立、深度)
- 数据结构之二叉树(遍历、建立、深度)
- 数据结构之二叉树(遍历、建立、深度)
- 数据结构之二叉树(遍历、建立、深度)
- 数据结构之二叉树(遍历、建立、深度)
- 数据结构之二叉树(遍历、建立、深度)
- 数据结构之 平衡二叉树的建立
- 数据结构-二叉树的建立
- 数据结构实验之二叉树的建立与遍历
- 数据结构之二叉树的建立与遍历
- 数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树的建立与遍历
- 2136 数据结构实验之二叉树的建立与遍历
- 2136 数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树的建立与遍历
- 那些年
- DLL或exe破解步骤
- C++ 操作Excel表格的编程实现
- 解决办法 此问题可能是由配置更改或安装另一个扩展导致的
- iOS开发~自定义Xcode工程模版与文件模版
- 数据结构之二叉树建立
- LDAP连接配置
- Route Determination In Sales Order(转载)
- mysql 启动错误-server PID file could not be found
- 4G手机CE认证介绍
- 设置guake tab改名后不随着内容不同而自动改变 系统ubuntu14.04
- 红黑树
- 5种服务器网络模型
- as3.0和js相互调用,js控制flash的颜色