LeetCode 题解(266) : Inorder Successor in BST

来源:互联网 发布:如何买域名和空间视频 编辑:程序博客网 时间:2024/05/21 10:15

题目:

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, returnnull.

题解:

用了递归。循环应该略有难度。

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; };

Python版:

# Definition for a binary tree node.# class TreeNode(object):#     def __init__(self, x):#         self.val = x#         self.left = None#         self.right = Noneclass 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

0 0