验证二叉查找树

二叉查找树

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

一棵BST定义为:

节点的左子树中的值要严格小于该节点的值。

节点的右子树中的值要严格大于该节点的值。

左右子树也必须是二叉查找树。

因为二叉查找树的中序遍历是有序的。所以验证是否为二叉查找树,用中序遍历这个二叉树,如果前一个结点的值大于当前结点的值,则证明这个不是二叉树。

代码实现

bool isValidBST(TreeNode *root) {
        // write your code here
        if(root == NULL)
            return true;
        stack<TreeNode*> stk;
        TreeNode *pre = NULL;

        while(root || !stk.empty())
        {
            if(root)
            {
                stk.push(root);
                root = root->left;
            }

            else
            {
                root = stk.top();
                stk.pop();
                if(pre && (root->val <= pre->val))
                    return false;
                pre = root;
                root = root->right;
            }
        }

        return true;
    }

(95) Validate Binary Search Tree

http://www.lintcode.com/zh-cn/problem/validate-binary-search-tree/

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-18 01:07:35

验证二叉查找树的相关文章

验证二叉查找树(LintCode)

验证二叉查找树 给定一个二叉树,判断它是否是合法的二叉查找树(BST) 一棵BST定义为: 节点的左子树中的值要严格小于该节点的值. 节点的右子树中的值要严格大于该节点的值. 左右子树也必须是二叉查找树. 样例 一个例子: 2 / 1 4 / 3 5 上述这棵二叉树序列化为 {2,1,4,#,#,3,5}. 中序遍历得到中序遍历序列,验证是否递增即可. 1 /** 2 * Definition of TreeNode: 3 * public class TreeNode { 4 * public

代码面试最常用的10大算法

摘要:面试也是一门学问,在面试之前做好充分的准备则是成功的必须条件,而程序员在代码面试时,常会遇到编写算法的相关问题,比如排序.二叉树遍历等等. 在程序员的职业生涯中,算法亦算是一门基础课程,尤其是在面试的时候,很多公司都会让程序员编写一些算法实例,例如快速排序.二叉树查找等等. 本文总结了程序员在代码面试中最常遇到的10大算法类型,想要真正了解这些算法的原理,还需程序员们花些功夫. 1.String/Array/Matrix 在Java中,String是一个包含char数组和其它字段.方法的类

最常用的10大算法

1.String/Array/Matrix 在Java中,String是一个包含char数组和其它字段.方法的类.如果没有IDE自动完成代码,下面这个方法大家应该记住: toCharArray() //get char array of a String Arrays.sort() //sort an array Arrays.toString(char[] a) //convert to string charAt(int x) //get a char at the specific ind

代码最常用的10大算法

摘要:面试也是一门学问,在面试之前做好充分的准备则是成功的必须条件,而程序员在代码面试时,常会遇到编写算法的相关问题,比如排序.二叉树遍历等等. 在程序员的职业生涯中,算法亦算是一门基础课程,尤其是在面试的时候,很多公司都会让程序员编写一些算法实例,例如快速排序.二叉树查找等等. 本文总结了程序员在代码面试中最常遇到的10大算法类型,想要真正了解这些算法的原理,还需程序员们花些功夫. 1.String/Array/Matrix 在Java中,String是一个包含char数组和其它字段.方法的类

【算法】代码面试最常用的10大算法

http://www.csdn.net/article/2014-04-10/2819237-Top-10-Algorithms-for-Coding-Interview 在程序员的职业生涯中,算法亦算是一门基础课程,尤其是在面试的时候,很多公司都会让程序员编写一些算法实例,例如快速排序.二叉树查找等等. 本文总结了程序员在代码面试中最常遇到的10大算法类型,想要真正了解这些算法的原理,还需程序员们花些功夫. 1.String/Array/Matrix 在Java中,String是一个包含cha

数据结构与算法:二叉树+堆

[二叉树] 1. 实现一个二叉查找树,并且支持插入.删除.查找操作 class Node: def __init__(self, data): self.data = data self.lchild = None self.rchild = None class BST: def __init__(self, node_list): self.root = Node(node_list[0]) for data in node_list[1:]: self.insert(data) # 查找

算法——dfs 判断是否为BST

95. 验证二叉查找树 中文English 给定一个二叉树,判断它是否是合法的二叉查找树(BST) 一棵BST定义为: 节点的左子树中的值要严格小于该节点的值. 节点的右子树中的值要严格大于该节点的值. 左右子树也必须是二叉查找树. 一个节点的树也是二叉查找树. Example 样例 1: 输入:{-1} 输出:true 解释: 二叉树如下(仅有一个节点): -1 这是二叉查找树. 样例 2: 输入:{2,1,4,#,#,3,5} 输出:true 解释: 二叉树如下: 2 / 1 4 / 3 5

C语言实现二叉查找树(BST)的基本操作

我们在上一篇博客中讲解了二叉树,这一次我们来实现二叉树的进阶--二叉查找树(Binary Search Tree),又称二插排序树(Binary Sort Tree).所以简称为BST.二插查找树的定义如下: 1.若左子树不为空,则左子树上所有节点的值均小于它的根节点的值: 2.若右子树不为空,则右子树上所有节点的值均大于它的根节点的值: 3.左右子树也分别为二叉排序树: 二叉排序树的一个重要特点就是中序遍历是一个递增序列.示例代码上传至: https://github.com/chenyufe

【LeetCode-面试算法经典-Java实现】【098-Validate Binary Search Tree(验证二叉搜索树)】

[098-Validate Binary Search Tree(验证二叉搜索树)] [LeetCode-面试算法经典-Java实现][所有题目目录索引] 原题 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 le