赞
踩
问题描述:给定一棵 BST,其根节点指针为 root,节点结构如下:
- struct Node
- {
- int key;
- struct Node *left, *right ;
- };
现要求在这棵 BST 查找指定 key 的中序遍历的先驱和后续节点,如果不存在,那么请返求 key 应该位于哪两个节点之间。
解:下面是解决这个问题的算法描述
- Input: root node, key
- output: predecessor node, successor node
-
- 1. If root is NULL
- then return
- 2. if key is found then
- a. If its left subtree is not null
- 前驱是这个左孩子本身,或者是左子树上最右边的孩子节点(如果存在)
- b. If its right subtree is not null
- 后续是这个右孩子本身,或者是右子树上最左边的孩子节点(如果存在)
- return
- 3. If key is smaller then root node
- 则把后续节点设置为 root(因为不存在后续,所以这个 root 是后续应在的范围)
- 递归在的左子树中搜索
- else
- 则把前驱节点设置为 root(因为不存在前驱,所以这个 root 是前驱应在的范围)
- 递归的在右子树中搜索
C++ 实现
- #include <iostream>
- using namespa
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。