LeetCodeブラッシングノート_98。バイナリ検索ツリーを確認する

トピックはLeetCodeからです

98.バイナリ検索ツリーの確認

他のソリューションまたはソースコードにアクセスできます:tongji4m3

解説

バイナリツリーを指定して、それが有効なバイナリ検索ツリーであるかどうかを判断します。

二分探索木に以下の特性があると仮定します。

ノードの左側のサブツリーには、現在のノードより小さい数値のみが含まれています。
ノードの右側のサブツリーには、現在のノードより大きい数値のみが含まれています。
すべての左と右のサブツリーは、それ自体がバイナリ検索ツリーでなければなりません。
例1:

输入:
    2
   / \
  1   3
输出: true

例2:

输入:
    5
   / \
  1   4
     / \
    3   6
输出: false
解释: 输入为: [5,1,4,null,null,3,6]。
     根节点的值为 5 ,但是其右子节点值为 4 。

アイデア

中間順序のトラバーサル。次のノードが前のノード以下の場合、二分探索木ではありません。

細部

isFirstを使用して、次の特別な状況でエラーを回避します。

左端がInteger.MIN_VALUEであるか、2つのInteger.MIN_VALUEがある場合

コード

public boolean isValidBST(TreeNode root)
{
    
    
    Stack<TreeNode> stack=new Stack<>();
    TreeNode temp = root;
    boolean isFirst = true;
    int pre=0;
    while(temp!=null || !stack.isEmpty())
    {
    
    
        while(temp!=null)
        {
    
    
            stack.push(temp);
            temp = temp.left;
        }
        temp = stack.pop();
        if(isFirst)
        {
    
    
            pre = temp.val;
            isFirst = false;
        }
        else if(temp.val<=pre)
        {
    
    
            return false;
        }
        pre = temp.val;
        temp = temp.right;
    }
    return true;
}

おすすめ

転載: blog.csdn.net/weixin_42249196/article/details/108440111