Leetcode 285: Inorder Successor in BST
Given a binary search tree and a node in it, find the in-order successor of that node in the BST.
Note: If the given node has no in-order successor in the tree, return null.
1 /** 2 * Definition for a binary tree node. 3 * public class TreeNode { 4 * public int val; 5 * public TreeNode left; 6 * public TreeNode right; 7 * public TreeNode(int x) { val = x; } 8 * } 9 */ 10 public class Solution { 11 public TreeNode InorderSuccessor(TreeNode root, TreeNode p) { 12 if (root == null || p == null) return null; 13 14 var stack = new Stack<TreeNode>(); 15 16 TreeNode node = root, successor = null; 17 while (node != null || stack.Count > 0) 18 { 19 if (node != null) 20 { 21 stack.Push(node); 22 node = node.right; 23 } 24 else 25 { 26 node = stack.Pop(); 27 if (node == p || node.val < p.val) return successor; 28 successor = node; 29 node = node.left; 30 } 31 } 32 33 return null; 34 } 35 } 36 37 public class Solution1 { 38 public TreeNode InorderSuccessor(TreeNode root, TreeNode p) { 39 if (root == null || p == null) return null; 40 41 return Inorder(root, p, null); 42 } 43 44 private TreeNode Inorder(TreeNode node, TreeNode p, TreeNode successor) 45 { 46 if (node == null) return successor; 47 48 var s = Inorder(node.right, p, successor); 49 50 if (node == p || node.val < p.val) return s; 51 52 return Inorder(node.left, p, node); 53 } 54 } 55 56 // dfs way 2, I prefer this 57 public class Solution2 { 58 public TreeNode InorderSuccessor(TreeNode root, TreeNode p) { 59 if (root == null || p == null) return null; 60 61 var successor = new TreeNode[1]; 62 63 Inorder(root, p, successor); 64 65 return successor[0]; 66 } 67 68 private void Inorder(TreeNode node, TreeNode p, TreeNode[] successor) 69 { 70 if (node == null) return; 71 72 Inorder(node.right, p, successor); 73 74 if (node == p || node.val < p.val) return; 75 successor[0] = node; 76 77 Inorder(node.left, p, successor); 78 } 79 }

浙公网安备 33010602011771号