题目:
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
.
题解:
用了递归。循环应该略有难度。
C++版
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: TreeNode* inorderSuccessor(TreeNode* root, TreeNode* p) { inorder(root, p); return successor; } bool inorder(TreeNode* root, TreeNode* p) { if(root->left) { if(inorder(root->left, p)) return true; } if(found) { successor = root; return true; } if(root == p) found = true; if(root->right) { if(inorder(root->right, p)) return true; } return false; } TreeNode* successor = NULL; bool found = false; };
# Definition for a binary tree node. # class TreeNode(object): # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution(object): def __init__(self): self.find = False self.successor = None def inorderSuccessor(self, root, p): """ :type root: TreeNode :type p: TreeNode :rtype: TreeNode """ self.inorder(root, p) return self.successor def inorder(self, root, p): if root.left != None: if self.inorder(root.left, p): return True if self.find: self.successor = root return True if root == p: self.find = True if root.right != None: if self.inorder(root.right, p): return True return False