2020年6月15日 星期一

Leetcode題解 Python & C#:六月挑戰DAY15 Search in a Binary Search Tree

給一個二元樹的根,要找到值為 val 的 node 並回傳,沒有則回傳 None。
這裡的二元樹是嚴格的,即 node 的左子樹皆小於自身,右子樹皆大於自身,即二元搜尋樹。

用一個標準的二元樹遞迴函數也能順利地解找到答案。

不過那樣會找到太多不必要的部分,也沒有用上二元搜尋樹的特色。

由於左邊皆比自身小,如果 val 小於 node.val,那就往左方而去,反之則右方。相等就直接回傳。

Python
class Solution:
    def searchBST(self, root: TreeNode, val: int) -> TreeNode:
        while root:         
            if root.val == val: 
                return root
            elif root.val > val: 
                root = root.left
            elif root.val < val: 
                root = root.right
        return root
C#
public class Solution {
    public TreeNode SearchBST(TreeNode root, int val) {
        if(root is null || root.val == val)
            return root;
        if(root.val > val)
            return SearchBST(root.left, val);
        else
            return SearchBST(root.right, val);
    }
}