Leetcode每日一題:22/05/16:面試題04.06:後繼者
阿新 • • 發佈:2022-05-16
設計一個演算法,找出二叉搜尋樹中指定節點的“下一個”節點(也即中序後繼)。如果指定節點沒有對應的“下一個”節點,則返回null
。
思路:二叉搜尋樹中序遍歷有序,因此:中序後繼節點,也就是比它大的最小的一個節點,
- 若節點存在右子樹,則該最小值為右子樹的最左葉子節點
- 若不存在右子樹,則該最小值為左子樹的父節點
- 若不存在則null
class Solution { public TreeNode inorderSuccessor(TreeNode root, TreeNode p) { TreeNode parent = null, node = root; if (node == null) { return null; } while (node != null) { if (node.val > p.val) {//當前節點值大於指定節點值,說明指定節點在當前節點的左子樹中 parent = node;//parent為左子樹父節點 node = node.left;//進入左子樹 } else if (node.val < p.val) {//當前節點值小於指定節點值,說明指定節點在當前節點的右子樹中 node = node.right;//進入右子樹 } else if (node.right != null) {//此時node.val=p.val,若右子樹非空,則進入右子樹 node = node.right; while (node.left != null) {//找到右子樹中最左葉子節點 node = node.left; } return node; } else {//node.val = p.val且右子樹為空 return parent; } } return parent; } }