数据结构学习4--树(二)之排序二叉树(上)
2015-09-18 16:38
288 查看
1 基本概念
只要在二叉树的基本定义上增加两个基本条件就可以了:(1)所有左子树的节点数值都小于此节点的数值;(2)所有右节点的数值都大于此节点的数值。typedef struct _TREE_NODE { int data; struct _TREE_NODE* parent; struct _TREE_NODE* left_child; struct _TREE_NODE* right_child; }TREE_NODE;
2 基本操作
2.1 创建二叉树节点
TREE_NODE* create_tree_node(int data) { TREE_NODE* pTreeNode = NULL; pTreeNode = (TREE_NODE*)malloc(sizeof(TREE_NODE)); memset(pTreeNode, 0, sizeof(TREE_NODE)); pTreeNode->data = data; return pTreeNode; }
2.2 数据查找
TREE_NODE* find_data_in_tree_node(const TREE_NODE* pTreeNode, int data) { //数据合法性 if(NULL == pTreeNode) return NULL; if(data == pTreeNode->data) return (TREE_NODE*)pTreeNode; else if(data < pTreeNode->data) return find_data_in_tree_node(pTreeNode->left_child, data); else return find_data_in_tree_node(pTreeNode->right_child, data); }分析:如果数值比节点数据小,那么向左继续遍历;反之向右继续遍历。如果遍历下去遇到了NULL指针,只能说明当前的数据在二叉树中还不存在。
2.3 统计节点总数
int count_node_number_in_tree(const TREE_NODE* pTreeNode) { if(NULL == pTreeNode) return 0; return 1 + count_node_number_in_tree(pTreeNode->left_child) + count_node_number_in_tree(pTreeNode->right_child); }
分析:先遍历左节点,一直遍历到最后的叶子,叶子的左节点为空,返回0,右节点也是空,还是0,这样节点数就是1,再返回上一节点,以此类推。
2.4 从小到大打印节点的数据
void print_all_node_data(const TREE_NODE* pTreeNode) { if(pTreeNode){ print_all_node_data(pTreeNode->left_child); printf("%d\n", pTreeNode->data); print_all_node_data(pTreeNode->right_child); } }分析:首先打印左子树的节点,然后打印本节点的数值,最后打印右子树节点的数值,这样所有节点的数值就都可以打印出来了。
2.5 统计树的高度
int calculate_height_of_tree(const TREE_NODE* pTreeNode) { int left, right; if(NULL == pTreeNode) return 0; left = calculate_height_of_tree(pTreeNode->left_child); right = calculate_height_of_tree(pTreeNode->right_child); return (left > right) ? (left + 1) : (right + 1); }分析:树的高度其实是指所有叶子节点中,从根节点到叶子节点的最大高度可以达到多少。当然,程序中表示得已经很明白了,如果节点为空,那么很遗憾,节点的高度为0;反之如果左子树的高度大于右子树的高度,那么整个二叉树的节点高度就是左子树的高度加上1;如果右子树的高度大于左子树的高度,那么整个二叉树的高度就是右子树的高度加上1。
相关文章推荐
- 算法与数据结构笔记
- 数据结构学习4--树(一)
- Libevent数据结构分析
- 从B树、B+树、B*树谈到R 树
- 数据结构 list map set
- 栈的应用-迷宫问题-数据结构
- 关于数据结构的学习经验分享 (二叉树相关的内容)
- soj.1003 hit or miss
- 二叉查找树及遍历算法
- 数据结构中的常用查找
- 数据结构实验二:双向链表
- 数据结构之快速排序
- 数据结构实验二:循环链表
- 数据结构实验二:单链表
- 【数据结构】线性表的链式存储结构--单链表
- 数据结构分类
- 项目4--顺序表应用 问题二
- 第三周 线性表(-)--顺序表 项目四--顺序表的应用 问题一
- 第3周SHH数据结构—【项目1-顺序表的基本运算】
- 第三周 项目3-单链表应用