98. Validate Binary Search Tree

来源:互联网 发布:it部门管理软件 编辑:程序博客网 时间:2024/06/04 22:25

98. Validate Binary Search Tree

  • 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;    }};
原创粉丝点击