【二叉树】二叉树排序树的判断、插入
2016-08-07 16:09
211 查看
二叉排序树,也称二叉搜索树,是指对于二叉树的所有结点,其左子树全部结点值小于该结点的值,右子树全部结点的值大于该结点的值。因此当我们中序遍历一棵二叉排序树时,得到的序列是一个递增序列。
注意:二叉排序树中没有相等的两个元素。
1.二叉排序树的插入
将一个元素(保证与树中元素不等)插入一棵二叉排序树时,根据二叉排序树的特征,将其与根结点比较,小于根结点插入左子树,并继续与根结点的左孩子比较直到到达叶子结点,插入。如果大于根结点则在右子树中做相同的处理。
遍历方式与二叉树一样http://blog.csdn.net/yebanxin/article/details/52139030
3.二叉排序树的判断
对普通的二叉树,如果保证对每个结点,其左孩子小于根结点,右孩子大于根结点,那么可以确定它是二叉排序树吗?
不行,这样不能保证左子树所有结点值均小于根结点,例如左孩子的右孩子大于根结点,上面的方法无法检测出来。
因此依据二叉排序树的特点,即中序遍历序列是单调递增的,那么可以对二叉排序树进行中序遍历,记下遍历的前一个值pre,与当前值进行比较,只要有不符合单调递增要求的,则不是二叉排序树。
注意:二叉排序树中没有相等的两个元素。
1.二叉排序树的插入
将一个元素(保证与树中元素不等)插入一棵二叉排序树时,根据二叉排序树的特征,将其与根结点比较,小于根结点插入左子树,并继续与根结点的左孩子比较直到到达叶子结点,插入。如果大于根结点则在右子树中做相同的处理。
void CreateBiSortTree(BiTreeNode* &T,int x)//将x插入二叉排序树 { if(T==NULL)//树为空,则建立根节点 { BiTreeNode *p=new BiTreeNode; p->value=x; p->lchild=NULL; p->rchild=NULL; T=p; } else { if(x<T->value) CreateBiSortTree(T->lchild,x);//x小于T,放左边 if(x>T->value) CreateBiSortTree(T->rchild,x);//x大于T,放右边 } }2.二叉排序树的遍历
遍历方式与二叉树一样http://blog.csdn.net/yebanxin/article/details/52139030
3.二叉排序树的判断
对普通的二叉树,如果保证对每个结点,其左孩子小于根结点,右孩子大于根结点,那么可以确定它是二叉排序树吗?
不行,这样不能保证左子树所有结点值均小于根结点,例如左孩子的右孩子大于根结点,上面的方法无法检测出来。
因此依据二叉排序树的特点,即中序遍历序列是单调递增的,那么可以对二叉排序树进行中序遍历,记下遍历的前一个值pre,与当前值进行比较,只要有不符合单调递增要求的,则不是二叉排序树。
bool checkBST(BiTreeNode* T) { int pre=INT_MIN;//保存中序遍历的前一个值 return checkInorder(T,pre); } bool checkInorder(BiTreeNode* T,int &pre) { if(!T) return 1; if(checkInorder(T->lchild,pre)==0) return 0; if(pre==INT_MIN) pre=T->value; else if(pre>T->value)//前一个值与当前值比较 return 0; else pre=T->value; if(checkInorder(T->rchild,pre)==0) return 0; return 1; }
相关文章推荐
- 用python实现二叉树搜索树/查找树/排序树的验证(判断)(四)(表插入递归)
- Codeforces Round #353 (Div. 2) D. Tree Construction(每个点按照二叉树排序树的插入插入到树中,问最后每个点的父亲节点的值是多少)
- 【笔试】超大文件里的数据去重排序;将log中MAC地址提取出来;取出数据库表T里第20行到29行的数据;如何判断一个二叉树B是不是二叉树A的子树?
- 数据结构链表的操作集合(建立,遍历,插入,删除,排序,长度,空判断等)
- 判断链表是否为空、求链表长度、插入新节点、删除节点、链表排序
- C/C++面试题(三) 推断二叉树、快速排序递归实现、递归判断数组递增
- 二叉树排序的插入
- C/C++面试题(三) 推断二叉树、快速排序递归实现、递归判断数组递增
- 排序算法: 冒泡排序, 快速排序,希尔排序,直接插入排序 ,直接选择排序,归并排序,堆排序
- 剑指offer 39. 二叉树的深度和判断是否为平衡二叉树
- 算法导论实验:第二章插入排序 P10
- 插入类排序总结
- 二路插入排序
- 判断二叉树是否为平衡树
- 直接插入排序的优化
- [4] 算法之路 - 插入排序之Shell间隔与Sedgewick间隔
- 算法篇---插入排序和选择排序算法
- J 判断二叉树每个结点的权值是否关于根节点完全对称
- Powerpoint中插入可以运算和排序的表格
- 插入排序