【BST】在搜索二叉树中,寻找节点数据域在[L,U]范围内的节点
2015-01-18 14:22
211 查看
题目:EPI
书上代码的思路是:由于BST的中序遍历的节点是按照升序排列的,所以先找到第一个(按照中序遍历的顺序)大于等于L的节点,然后依次找出这个节点的后继节点中,落在范围[L,U]的节点。
但有一个问题就是,如果二叉树节点没有指向父节点的指针域,这个方法就不可取。何况题目没有要求返回的节点要按照升序排列。所以我写出以下代码,不需要二叉树节点有指向父节点的指针,返回的结果在[L,U]范围,但不是有序的。
书上代码的思路是:由于BST的中序遍历的节点是按照升序排列的,所以先找到第一个(按照中序遍历的顺序)大于等于L的节点,然后依次找出这个节点的后继节点中,落在范围[L,U]的节点。
但有一个问题就是,如果二叉树节点没有指向父节点的指针域,这个方法就不可取。何况题目没有要求返回的节点要按照升序排列。所以我写出以下代码,不需要二叉树节点有指向父节点的指针,返回的结果在[L,U]范围,但不是有序的。
void find_larger_or_equal_than_L(const shared_ptr<treenode> root, const int L, vector<shared_ptr<treenode>> &res) { if (root == nullptr) return; if (root->data < L) { find_larger_or_equal_than_L(root->right, L, res); return; } res.push_back(root); find_larger_or_equal_than_L(root->left, L, res); find_larger_or_equal_than_L(root->right, L, res); } void find_smaller_or_equal_than_U(const shared_ptr<treenode> root, const int U, vector<shared_ptr<treenode>> &res) { if (root == nullptr) return; if (root->data >U) { find_smaller_or_equal_than_U(root->left, U, res); return; } res.push_back(root); find_smaller_or_equal_than_U(root->left, U, res); find_smaller_or_equal_than_U(root->right, U, res); } vector<shared_ptr<treenode>> find_range_nodes(const shared_ptr<treenode> root, const int L, const int U) { vector<shared_ptr<treenode>> res; if (root == nullptr || L>U) return res; //找一个范围在[L,U]的节点 shared_ptr<treenode> cur = root; while (cur) { if (cur->data < L) cur = cur->right; else if (cur->data > U) cur = cur->left; else break; } if (cur == nullptr) return res; res.push_back(cur);//cur符合要求, 插入res find_larger_or_equal_than_L(cur->left, L,res);//cur的左子树中大于等于L的节点插入res find_smaller_or_equal_than_U(cur->right, U, res);//cur的右子树中小于等于U的节点插入res return res; }
相关文章推荐
- 【二叉树】寻找二叉树/BST的两个节点的最低公共祖先
- 二叉树问题---寻找搜索二叉树中两个错误的节点
- 三种实现方法实现数据表中遍历寻找子节点
- 寻找二叉树中两个节点的最近祖先
- 从底层逐层的开始打印出二叉树的节点数据
- 【二叉树6】寻找二叉树中任意节点最远的距离
- Javascript根据选中的数据颜色,全文档搜索选中的数据节点(可条件选择单个或多个)
- MSDN Visual系列:使用范围细化业务数据目录的搜索
- 笔试算法题(36):寻找一棵二叉树中最远节点的距离 & 根据二叉树的前序和后序遍历重建二叉树
- 二叉树寻找中序遍历的后继节点
- [置顶] 寻找二叉树两节点的最近的公共祖先[转载+整理]
- 寻找二叉树中两个节点的最近的公共祖先
- C数据搜索函数 仿照E的 寻找字节集
- SQL SERVER 2000 遍历父子关系数据的表(二叉树)获得所有子节点 所有父节点及节点层数函数
- 寻找二叉树两个节点的最近公共祖先
- 从顶层开始逐层打印二叉树节点数据
- 数据表中遍历寻找子节点的三种实现方法
- 寻找二叉树中和为固定值的从根节点到叶节点的所有路径
- 二叉树,给定任意两个节点,寻找最近的父节点
- 寻找二叉树中两个子节点的最近父节点