zoukankan      html  css  js  c++  java
  • lintcode-95-验证二叉查找树

    95-验证二叉查找树

    给定一个二叉树,判断它是否是合法的二叉查找树(BST)
    一棵BST定义为:

    • 节点的左子树中的值要严格小于该节点的值。
    • 节点的右子树中的值要严格大于该节点的值。
    • 左右子树也必须是二叉查找树。
    • 一个节点的树也是二叉查找树。

    样例

    一个例子:

    上述这棵二叉树序列化为 {2,1,4,#,#,3,5}.

    标签

    分治法 二叉查找树 递归 二叉树

    思路

    方法一:中序遍历这棵树,用数组保存遍历结果,若数组严格递增,则可判定这棵树是一个二叉排序树
    方法二:用prev指针记录父节点信息,遍历树,用二叉排序树的定义来判断

    code

    在这里给出方法二的实现代码

    /**
     * Definition of TreeNode:
     * class TreeNode {
     * public:
     *     int val;
     *     TreeNode *left, *right;
     *     TreeNode(int val) {
     *         this->val = val;
     *         this->left = this->right = NULL;
     *     }
     * }
     */
    class Solution {
    public:
        /**
         * @param root: The root of binary tree.
         * @return: True if the binary tree is BST, or false
         */
        bool isValidBST(TreeNode* root) {
            TreeNode *pre = NULL;
    
            return isValidBST(root, pre);
        }
    
        bool isValidBST(TreeNode *root, TreeNode *&pre) {
            if (root == NULL) {
                return true;
            }
            if (!isValidBST(root->left, pre)) {
                return false;
            }
            if (pre != NULL && pre->val >= root->val) {
                return false;
            }
            pre = root;
            return isValidBST(root->right, pre);
        }
    };
    
  • 相关阅读:
    hdu5926Mr. Frog’s Game
    hdu5926Mr. Frog’s Game
    hdu5924Mr. Frog’s Problem
    hdu5924Mr. Frog’s Problem
    hdu5922Minimum’s Revenge
    hdu5922Minimum’s Revenge
    带空格的字符串输入
    带空格的字符串输入
    382. Linked List Random Node
    319. Bulb Switcher
  • 原文地址:https://www.cnblogs.com/libaoquan/p/7152428.html
Copyright © 2011-2022 走看看