二叉查找树查找后继,前驱的问题
来源:互联网 发布:mac桌面壁纸大小 编辑:程序博客网 时间:2024/04/27 19:22
二叉查找树按照二叉树进行组织。二叉查找树关键字的存储方式总是瞒住二叉查找树性质:
设x为二查查找树种一个节点。如果y是x的左子树中的一个节点,那么key[x] >= key[y]。如果y是x的右子树的一个节点,那么key[x] <= key[y]。
这样对二叉查找树进行中序遍历就可得到书中所有元素的一个非降序排列。
查找某一个存在节点的前驱和后继。某一个节点x的后继就是大于key[x]的关键字中最小的那个节点,前驱就是小于key[x]的关键字中最大的那个节点。查找二叉前驱和后继节点的算法如下所示:
- typedef struct _node {
- struct _node *left_child;
- struct _node *right_child;
- struct _node * parent;
- ctype data;
- }node; //树节点数据结构定义
- typedef node* Tree;
- //查找二叉查找树中关键字最小的节点,返回指向该节点的指针
- Tree tree_minimum(Tree root)
- {
- Tree p = root;
- while (p->left_child != null)
- p = p->left_child;
- return p;
- }
- //查找二叉查找树中关键字最大的节点,返回指向该节点的指针
- Tree tree_maxmum(Tree root)
- {
- Tree p = root;
- while (p->right_child != null)
- {
- p = p->right_child;
- }
- return p;
- }
- //查找二叉查找树中节点x的后继节点,返回指向该节点的指针
- //在查找过程中,如果节点x右子树不为空,那么返回右子树的最小节点即可
- //如果节点x的右子树为空,那么后继节点为x的某一个祖先节点的父节点,而且该祖先节点是作为其父节点的左儿子
- Tree tree_successor(Tree x)
- {
- if (x->right_child != null)
- return tree_minimum(x->right_child);
- //x用来保存待确定的节点
- //y为x的父节点
- Tree y = x->parent;
- while (y != NULL && x == y->right_child)
- {
- x = y;
- y = y->parent;
- }
- return y;
- }
- //查找二叉查找树中节点x的前驱节点,返回指向该节点的指针
- //在查找过程中,如果节点x左子树不为空,那么返回左子树的最大节点即可
- //如果节点x的左子树为空,那么前驱节点为x的某一个祖先节点的父节点,而且该祖先节点是作为其父节点的右儿子
- Tree tree_predecessor(Tree x)
- {
- if (x->left_child != null)
- return tree_maxmum(x->left_child);
- Tree y = x->parent;
- while (y != NULL && x == y->left_child)
- {
- x = y;
- y = y->parent;
- }
- return y;
- }
原文出自:http://blog.chinaunix.net/uid-26382417-id-3110160.html
- 二叉查找树查找后继,前驱的问题
- 线索二叉树中查找前驱和后继的问题
- 二叉树前驱后继的查找(这个容易理解)
- 二叉树的线索化及其前驱后继查找
- 查找线索二叉树的前驱和后继
- 二叉查找树后继节点和前驱节点查找
- 二叉查找树后继节点和前驱节点查找
- 二叉树的遍历 插入 查找 删除 最大值 最小值 前驱 后继节点的查找
- 二叉查找树(4) - 中序查找一个给定值的前驱以及后继
- 二叉树的祖先结点,删除,插入,查找,前驱结点,后继结点等
- 二叉查找树的后继
- 【IT笔试面试题整理】二叉查找树后继节点和前驱节点查找 --转
- 二叉树的前驱和后继
- 二叉树遍历的前驱和后继
- 线索二叉树建立、中序遍历、查找前驱后继、插入
- java实现TreeSet,迭代器使用二叉查找树,每个节点有前驱和后继
- 二叉查找树前驱、后继,非递归不使用栈不使用访问标记的中序遍历,最大最小节点
- 二叉查找树的查找,插入,最大/最小值查找,前驱/后续查找,删除算法[java]
- Linux下EBCDIC和ASCII代码的转换
- JPEG解码
- Objective-C 的属性与合成方法使用详解
- 【转载】HBase基本概念和hbase shell常用命令用法
- Subversion快速入门教程
- 二叉查找树查找后继,前驱的问题
- [Android实例] Android JSON解析示例代码
- Objective-C 的 self 和 super 详解
- respondsToSelector判断是否实现了某方法
- 终端属性设置总揽
- 向量,矩阵,张量----基本概念
- Obejctive-C 中定义可变参函数
- Google 以图搜图 - 相似图片搜索原理 - Java实现
- 解决APK安装成功后点击"打开"再按Home键遇到的问题