zoukankan      html  css  js  c++  java
  • [LeetCode] 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.

    confused what "{1,#,2,3}" means? > read more on how binary tree is serialized on OJ.

    解题思路:

    (1)空二叉树是BST

    (2)若根节点R值大于左子树的最大值。且小于右子树最小值,而且左右子树都是BST。那么以R为根的树也是BST

    因此代码例如以下:

    /**
     * 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;
            }
            TreeNode* leftMaxNode = getMaxNode(root->left);
            TreeNode* rightMinNode = getMinNode(root->right);
            if(leftMaxNode!=NULL && leftMaxNode->val >= root->val){
                return false;
            }
            if(rightMinNode!=NULL && rightMinNode->val <= root->val){
                return false;
            }
            return isValidBST(root->left) && isValidBST(root->right);
        }
        
        TreeNode* getMaxNode(TreeNode* root){
            if(root == NULL){
                return NULL;
            }
            TreeNode* maxNode = root;
            TreeNode* leftMaxNode = getMaxNode(root->left);
            TreeNode* rightMaxNode = getMaxNode(root->right);
            if(leftMaxNode!=NULL && leftMaxNode->val > maxNode->val){
                maxNode = leftMaxNode;
            }
            if(rightMaxNode!=NULL && rightMaxNode->val > maxNode->val){
                maxNode = rightMaxNode;
            }
            return maxNode;
        }
        
        TreeNode* getMinNode(TreeNode* root){
            if(root == NULL){
                return NULL;
            }
            TreeNode* minNode = root;
            TreeNode* leftMinNode = getMinNode(root->left);
            TreeNode* rightMinNode = getMinNode(root->right);
            if(leftMinNode!=NULL && leftMinNode->val < minNode->val){
                minNode = leftMinNode;
            }
            if(rightMinNode!=NULL && rightMinNode->val < minNode->val){
                minNode = rightMinNode;
            }
            return minNode;
        }
    };


  • 相关阅读:
    C#面向对象编程基础-喜课堂笔记
    [爬虫]通过url获取连接地址中的数据
    第10季asp.net基础
    初学MVC
    学习MVC遇到的问题
    飞行棋小项目
    JAVAscript学习笔记
    iOS 清除xcode缓存和生成文件
    Access用OleDbParameter更新/插入数据
    SQLite动态库下载
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/7181927.html
Copyright © 2011-2022 走看看