二叉排序树
来源:互联网 发布:mysql 集群 phxsql 编辑:程序博客网 时间:2024/06/05 07:35
二叉排序树(Binary Sort Tree,简称BST),又称二叉查找树,是红黑树、AVL树等的基础。它或是一棵空树,或者是具有下列性质的一棵二叉树:
1、若它的左子树不空,则左子树上所有节点的值均小于它的根节点的值;
2、若它的右子树不空,则右子树上所有节点的值均大于它的根节点的值;
3、它的左右子树也分别为二叉排序树。
已知,某树的先序遍历为:4, 2, 1 ,0, 3, 5, 9, 7, 6, 8. 中序遍历为: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. 请画出该树。
下面的一棵树即为二叉排序树:
二叉排序树的创建
#include <iostream> using namespace std; // BITree的结点 typedef struct BiTNode { int key; struct BiTNode *lchild, *rchild; }BiTNode, *BITree; // 在给定的BITree中插入结点,其数据域为element, 使之称为新的BITree bool BITreeInsert(BiTNode * &p, int element) { if(NULL == p) // 空树 { p = new BiTNode; p->key = element; p->lchild = p->rchild = NULL; return true; } if(element == p->key) // BITree中不能有相等的值 return false; if(element < p->key) // 递归 return BITreeInsert(p->lchild, element); return BITreeInsert(p->rchild, element); // 递归 } // 建立BITree void createBITree(BiTNode * &T, int a[], int n) { T = NULL; int i; for(i = 0; i < n; i++) { BITreeInsert(T, a[i]); } } //后续遍历销毁二叉树 void freeTree(BiTNode* root) { if (root!=NULL) { if (root->lchild) { freeTree(root->lchild); root->lchild = NULL; } if (root->rchild) { freeTree(root->rchild); root->rchild = NULL; } if (root!=NULL) { free(root); root=NULL; } } } // 先序遍历 void preOrderTraverse(BITree T) { if(T) { cout << T->key << " "; preOrderTraverse(T->lchild); preOrderTraverse(T->rchild); } } // 中序遍历 void inOrderTraverse(BITree T) { if(T) { inOrderTraverse(T->lchild); cout << T->key << " "; inOrderTraverse(T->rchild); } } int main() { int a[10] = {4, 5, 2, 1, 0, 9, 3, 7, 6, 8}; int n = 10; BITree T; // 并非所有的a[]都能构造出BITree,所以,最好对createBITree的返回值进行判断 createBITree(T, a, n); preOrderTraverse(T); cout << endl; inOrderTraverse(T); cout << endl; freeTree(T);system("pause");return 0; }
0 0
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 解决Virtualbox的容量不够的问题
- 文章标题
- 最全的常用正则表达式大全——包括校验数字、字符、一些特殊的需求等等
- 获取map的key和value
- [从头学绘画] 第08节 二十四式太极拳(7-12)
- 二叉排序树
- js 事件冒泡 事件代理 事件捕捉 this指针 bind this
- JDBC入门介绍第一章
- C++给函数传数组参数C++给函数传数组参数
- 适配器模式(Adapter)
- C++ stringstream的用法
- 拦截匪徒问题
- yii高级版的默认控制器更改
- Android对象序列化