二叉树的实现
2015-06-01 16:43
375 查看
参考:二叉查找树(一)之
图文解析 和 C语言的实现
目录
二叉树的存储结构定义
前序遍历二叉树
中序遍历二叉树
后序遍历二叉树
二叉树的创建:利用前序遍历的方法
查找二叉树中值为x的结点地址
统计二叉树中结点的个数
判断二叉树是否等价
求二叉树的高度
以上函数实现都是利用树的递归定义!
二叉树的存储结构定义
前序遍历二叉树
中序遍历二叉树
后序遍历二叉树
二叉树的创建:利用前序遍历的方法
查找二叉树中值为x的结点地址
统计二叉树的结点个数
判断二叉树是否等价
求二叉树的高度
算法实现源码下载地址:
图文解析 和 C语言的实现
目录
二叉树的存储结构定义
前序遍历二叉树
中序遍历二叉树
后序遍历二叉树
二叉树的创建:利用前序遍历的方法
查找二叉树中值为x的结点地址
统计二叉树中结点的个数
判断二叉树是否等价
求二叉树的高度
以上函数实现都是利用树的递归定义!
二叉树的存储结构定义
typedef int datatype; typedef struct BTreeNode //二叉树结点结构体 { datatype key; struct BTreeNode *left; struct BTreeNode *right; }Node, *p_BTree;
前序遍历二叉树
/*------------------------- 前序遍历二叉树——递归 参数:指向二叉树根结点指针 --------------------------*/ void preorder_btree(p_BTree tree) { if (tree) { printf("%d ", tree->key); preorder_btree(tree->left); preorder_btree(tree->right); } }
中序遍历二叉树
/*------------------------- 中序遍历二叉树——递归 参数:指向二叉树根结点指针 --------------------------*/ void inorder_btree(p_BTree tree) { if (tree) { inorder_btree(tree->left); printf("%d ", tree->key); inorder_btree(tree->right); } }
后序遍历二叉树
/*------------------------- 后序遍历二叉树——递归 参数:指向二叉树根结点指针 --------------------------*/ void postorder_btree(p_BTree tree) { if (tree) { postorder_btree(tree->left); postorder_btree(tree->right); printf("%d ", tree->key); } }
二叉树的创建:利用前序遍历的方法
/*----------------------------------- 根据前序遍历的结果创建一个棵给定的二叉树 参数:指向二叉树根结点的指针的指针 -------------------------------------*/ void creatbintree(p_BTree *tree) //指针的指针,用于修改指针中存放的地址值 { int datain; if ((scanf("%d", &datain))==1 && datain == 0) //Q_yyt:可以用什么标识符 { (*tree) = NULL; } else { (*tree) = (p_BTree)malloc(sizeof(BTreeNode)); (*tree) -> key = datain; creatbintree(&(*tree)->left); creatbintree(&(*tree)->right); } }
查找二叉树中值为x的结点地址
/*-------------------------------------------- 二叉树的查找,查找二叉树中值为x的结点的位置 参数: 指向二叉树根结点的指针 ---------------------------------------------*/ p_BTree locate(p_BTree tree, datatype x) { p_BTree p; if (tree == NULL) { return NULL; } else { if (tree->key == x) { return tree; } else { p = locate(tree->left, x); if (p) { return p; } else { return locate(tree->right, x); } } } }
统计二叉树的结点个数
/*--------------------------------------- 统计二叉树中结点的个数 参数:指向二叉树根结点的指针 ----------------------------------------*/ int numofnode(p_BTree tree) { if (tree == NULL) return 0; else return (numofnode(tree->left)+numofnode(tree->right) + 1); }
判断二叉树是否等价
/*----------------------------------------- 判断二叉树是否等价 参数:指向二叉树根结点的指针 -----------------------------------------*/ int isequal(p_BTree tree1, p_BTree tree2) { int t; t = 0; if (tree1==NULL && tree2==NULL) { t=1; } else { if (tree1!=NULL && tree2!=NULL) { if (tree1->key == tree2->key) { if (isequal(tree1->left, tree2->left)) { t = isequal(tree1->right, tree2->right); } } } } return t; }
求二叉树的高度
/*------------------------------------------------------ 求二叉树的高度(深度 ) 参数:指向二叉树根结点的指针 --------------------------------------------------------*/ int depth(p_BTree tree) { int h, lh, rh; if (tree == NULL) { h = 0; } else { lh = depth(tree->left); rh = depth(tree->right); h = (lh >= rh)?lh+1:rh+1; } return h; }
算法实现源码下载地址:
相关文章推荐
- 6_css选择符详解.txt
- 5_css控制文字及链接.txt
- 6月1日每日股评
- Go语言学习笔记(一) : 搭建Windows下的Go开发环境
- 左右自动切换的选项卡
- Git中当add错误的时候怎么办?
- 4_css语法及优先权.txt
- PHP中include和require的区别
- XPath 获取两个node中间的HTML Nodes
- Memory-mapped I/O vs port-mapped I/O
- nodejs介绍
- Python之学习笔记(内建模块html,xml)
- QT线程退出
- JAVA 取Json字符串 里面值
- sql注释
- 找出1-100中缺失的两个数
- 3_css语法.txt
- 解决chrome中您的连接不是私密连接
- nginx的优化配置参数
- QML中的模型/视图--QML数据模型