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;
    }
};
发布了69 篇原创文章 · 获赞 18 · 访问量 7万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览