98. Validate Binary Search Tree

98. Validate Binary Search Tree

題目描述

Given a binary tree, determine if it is a valid binary search tree (BST).
Assume a BST is defined as follows:

  • The left subtree of a node contains only nodes with keys less than the node’s key.
  • The right subtree of a node contains only nodes with keys greater than the node’s key.
  • Both the left and right subtrees must also be binary search trees.

Example 1:

2
/ \
1 3

Binary tree [2,1,3], return true.

Example 2:

1
/ \
2 3

Binary tree [1,2,3], return false.

解題思路

給出樹要我們求樹是否是二分搜索樹。即左邊孩子比父節點小,右邊孩子比父節點大。
我們可以用DFS來求,用一個棧進行中序遍歷記錄每個點,棧裏的點記錄的順序分別是左孩子,父節點,右孩子,這樣我們就可以用一個節點與前一個節點比較大小就可。

/**
 * 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:
    bool isValidBST(TreeNode* root) {
        if (root == NULL) return true;
        stack<TreeNode*> s;
        TreeNode* pre = NULL;
        while (root != NULL || !s.empty()) {
            while (root != NULL) {
                s.push(root);
                root = root->left;
            }
            root = s.top();
            s.pop();
            if(pre != NULL && root->val <= pre->val) return false;
            pre = root;
            root = root->right;
        }
        return true;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章