链式二叉树

来源:互联网 发布:数据流程图软件 编辑:程序博客网 时间:2024/05/19 02:05
# include <stdio.h># include <stdlib.h># include <malloc.h>struct NODE{char ch;struct NODE *lchild;struct NODE *rchild;};struct NODE *CreateTree(void);bool is_empty(struct NODE *p);int depth(struct NODE *p);bool traverse(struct NODE *p);bool destory(struct NODE *p);void visit(char ch);int main(){struct NODE *root =  CreateTree();if ( is_empty(root) )printf("是空树\n");elseprintf("不是空树\n");int depths = depth(root);printf("depth is %d\n", depths);traverse(root);destory(root);return 0;}/* 功能:先序创建二叉树 返回:创建的节点地址 */struct NODE *CreateTree(void){char ch;struct NODE *p = NULL;scanf("%c", &ch);if (' ' == ch){return p;}else{p = (struct NODE *)malloc(sizeof(struct NODE));p->ch = ch;p->lchild = CreateTree();p->rchild = CreateTree();return p;}}/* 功能:判断该二叉树是否为空 返回:true 空; false 非空 */bool is_empty(struct NODE *p){if (p == NULL)return true;elsereturn false;}/* 功能:求二叉树的深度 */int depth(struct NODE *p){int l;  //左子树的深度 int r;//右子树的深度if (p == NULL){return 0;}if ( p->lchild ){l = depth(p->lchild); }else{l = 0;}if ( p->rchild ){r = depth(p->rchild);}else{r = 0;}return (l>r) ? (l+1) : (r+1);}/* 功能:先序遍历二叉树 */bool traverse(struct NODE *p){if (!p)return true;traverse(p->lchild);traverse(p->rchild);visit(p->ch);return true;}/* 功能: 销毁二叉树 */  bool destory(struct NODE *p){if (p){if (p->lchild){destory(p->lchild);}if (p->rchild){destory(p->rchild);}free(p);p = NULL;}return true;}void visit(char ch){printf("%c ", ch);}

0 0
原创粉丝点击