448. 二叉查找树的中序后继
描述
给定一个二叉查找树(什么是二叉查找树),以及一个节点,求该节点在中序遍历的后继,如果没有则返回null
- 保证p是给定二叉树中的一个节点。(您可以直接通过内存地址找到p)
样例 1:
输入:
{1,#,2}, node with value 1
输出:
2
解释:
1
\
2
样例 2:
输入:
{2,1,3}, node with value 1
输出:
2
解释:
2
/ \
1 3
挑战
O(h),其中h是BST的高度。
题解
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
/*
* @param root: The root of the BST.
* @param p: You need find the successor node of p.
* @return: Successor of p.
*/
public TreeNode inorderSuccessor(TreeNode root, TreeNode p) {
// write your code here
TreeNode pre = null;
TreeNode cur = root;
while (cur != null) {
if (cur == p) {
if (cur.right != null) {
TreeNode ans = cur.right;
while (ans.left != null) {
ans = ans.left;
}
return ans;
}
return pre;
}
if (p.val > cur.val) {
cur = cur.right;
} else {
pre = cur;
cur = cur.left;
}
}
return null;
}
}
最后说两句
非常感谢你阅读本文章,如果你觉得本文对你有所帮助,请留下你的足迹,点个赞,留个言,多谢~
作者水平有限,如果文章内容有不准确的地方,请指正。
希望小伙伴们都能每天进步一点点。
声明
本文由二当家的白帽子博客原创,转载请注明来源,谢谢~