Finding the Predecessor and Successor Node of a Binary Search Tr
- 时间:2020-09-07 12:03:44
- 分类:网络文摘
- 阅读:131 次
A Binary Search Tree (BST) is a commonly used data structure that can be used to search an item in O(LogN) time. A BST should have the following characteristics: its left nodes are smaller than the root and its right nodes are larger than the root.
If we perform an inorder traversal: left nodes first, current node, and then right nodes – we will have a fully sorted sequence.

inorder-traversal-of-a-bst
To find the Predecessor or Sucessor Node of a BST – we can perform the following algorithms:

predecessor-and-successor-of-a-bst
Find the Predecessor Node of a Binary Search Tree
The predecessor node is the largest node that is smaller than the root (current node) – thus it is on the left branch of the Binary Search Tree, and the rightmost leaf (largest on the left branch).
The C++ function to find the predecessor node of a BST node:
1 2 3 4 5 6 | TreeNode* predecessor(TreeNode* root) { if (!root) return nullptr; root = root->left; while (root->right) root = root->right; return root; } |
TreeNode* predecessor(TreeNode* root) {
if (!root) return nullptr;
root = root->left;
while (root->right) root = root->right;
return root;
}And below is the Java implementation to get the predecessor node of a Binary Search Tree:
1 2 3 4 5 6 | public int predecessor(TreeNode root) { if (root == null) return null; root = root.left; while (root.right != null) root = root.right; return root; } |
public int predecessor(TreeNode root) {
if (root == null) return null;
root = root.left;
while (root.right != null) root = root.right;
return root;
} Python function to get the predecessor of a BST:
1 2 3 4 5 6 7 | def predecessor(root): if root is None: return None root = root.left while root.right: root = root.right return root |
def predecessor(root):
if root is None:
return None
root = root.left
while root.right:
root = root.right
return rootFind the Successor Node of a Binary Search Tree
On the other hand, the successor node is the smallest node that is bigger than the root/current – thus it is on the right branch of the BST, and also on the leftmost leaf (smallest on the right branch).
The C++ function to get the successor node of a Binary Search Tree.
1 2 3 4 5 6 | TreeNode* successor(TreeNode* root) { if (!root) return nullptr; root = root->right; while (root->left) root = root->left; return root; } |
TreeNode* successor(TreeNode* root) {
if (!root) return nullptr;
root = root->right;
while (root->left) root = root->left;
return root;
}Java method to get the successor:
1 2 3 4 5 6 | public int successor(TreeNode root) { if (root == null) return null; root = root.right; while (root.left != null) root = root.left; return root; } |
public int successor(TreeNode root) {
if (root == null) return null;
root = root.right;
while (root.left != null) root = root.left;
return root;
} Finally, the below is the Python implementation of getting a sucessor node of a BST:
1 2 3 4 5 6 7 | def successor(root): if root is None: return None root = root.right while root.left: root = root.left return root |
def successor(root):
if root is None:
return None
root = root.right
while root.left:
root = root.left
return rootAll implementation of finding successor or predecessor takes O(1) constant space and run O(N) time (when BST is just a degraded linked list) – however, on average, the complexity is O(LogN) where the binary tree is balanced.
Finding successor or predecessor is very useful – for example, we can use this to delete a node in a binary search tree.
–EOF (The Ultimate Computing & Technology Blog) —
推荐阅读:百度AI生态的建立 给创业公司带来了什么好处? 创业项目营销效果不佳 只因没做好这几件事 AI把英语系新生吓退学?别急,我们从来都是那只懒蚂蚁 创业初期该做什么?首先你需要避开的这5大坑! 2018世界人工智能大会开幕,它给创业者带来了哪些思路? 创业寒冬下 初创公司如何才可以打破C轮死魔咒? 为什么企业找不到合适的互联网营销负责人? 知识焦虑遇冷后 知识付费的下一个风口究竟在哪里? 2018秋北京松松兄弟线下聚会干货分享 赌徒谬误:究竟谁在交易所玩合约?
- 评论列表
-
- 添加评论