`
chriszeng87
  • 浏览: 734069 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

判断是否二叉搜索树

阅读更多

转自:http://blog.163.com/yichangjun1989@126/blog/static/1319720282014641735487/

 

给定一棵二叉树的根结点,树中每个结点包含一个整数值val以及左右儿子结点指针left, right,判断该树是否为二叉搜索数(Binary Search Tree)。

二叉搜索树的简单定义:对于树中任意一棵以T为根结点的子树,T的val大于等于其左子树中任意结点的val值,小于其右子树中任意结点的val值。

跟Leetcode上那个还有点不一样。

这里是要求左子树全部小于等于当前值,右子树必须全部大于。所以用pre来中序遍历不好区分当前是否可以等。

这里用另一种范围限定的方法来做

/*
树结点的定义(请不要在代码中定义该结构)
struct TreeNode {
  int val;
  TreeNode *left, *right;
}*/
constint INT_MIN =-10000000;
constint INT_MAX =10000000;
bool _preorder(TreeNode* root,int min,int max);
bool isBST(TreeNode*root){
  if(!root)
     return true;
  int pre=INT_MIN;

   return _preorder(root,INT_MIN,INT_MAX);
}
bool _preorder(TreeNode* root,int min,int max)
{
    if(!root)
       return true;
    if(root->val<min||root->val>max)
       return false;
    if(!_preorder(root->left,min,root->val))
       return false;
    return _preorder(root->right,root->val+1,max);
}


分享到:
评论

相关推荐

    陈越、何钦铭-数据结构作业12:是否同一棵二叉搜索树

    给定一个插入序列就可以唯一确定一棵二叉搜索树。然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到。例如分别按照序列{2, 1, 3}...于是对于输入的各种插入序列,你需要判断它们是否能生成一样的二叉搜索树。

    面试题27_二叉搜索树与双向链表

    在IT领域,二叉搜索树(Binary Search Tree, BST)是一种常见的数据结构,它具有左子树上所有节点的值小于根节点的值,右子树上所有节点的值大于根节点的值的特性。这样的特性使得二叉搜索树非常适合进行查找、插入...

    给定二叉树是否是二叉搜索树

    二叉搜索树定义:  (1)若它的左子树不空,则左子树上所有节点的值均小于它的根节点的值。  (2)若它的右子树不空,则右子树上所有节点的值均大于...在递归判断左子树右子树,有任一方不符合条件则不是二叉搜索树。

    二叉搜索树编程接口

    针对二叉搜索树的编程接口,包括如下接口: 初始化为空树 判断树是否为空 判断树是否已满 确定树中节点个数 向树中添加一个节点 判断树中是否存在某个节点 从树中删除一个节点 将某个函数作用于树中每个节点 删除树...

    二叉搜索的实现、插入、搜索、各种遍历及判断

    此外,还需要递归地检查左子树和右子树是否也都满足二叉搜索树的条件。 综上所述,二叉搜索树是一种非常重要的数据结构,在实际应用中广泛应用于快速查找、排序等场景。通过对其实现、插入、搜索、删除以及遍历操作...

    二叉搜索树源码分享

    二叉搜索树(Binary Search Tree,BST)是一种特殊的二叉树数据结构,其每个节点的值都大于其左子树中所有节点的值,并小于其右子树中所有节点的值。这种特性使得二叉搜索树在插入、查找和删除操作上具有较高的效率...

    小白专场:是否同一棵二叉搜索树.pptx

    分别建两棵搜索树的判别方法:分别根据两个序列生成两棵二叉搜索树,然后判断这两棵树是否一样。 2. 不建树的判别方法:不生成二叉搜索树,而是直接判断两个序列是否能生成一样的二叉搜索树。 3. 建一棵树,再...

    Java实现二叉排序树

    二叉排序树(Binary Sort Tree,BST),也称为二叉搜索树,是一种特殊的二叉树数据结构,它的每个节点都包含一个键(key)、一个关联的值、一个指向左子节点的指针和一个指向右子节点的指针。在二叉排序树中,对于...

    一个ppt让你了解二叉搜索树的判断

    在判断一个二叉树是否为二叉搜索树时,通常会使用递归的方法。递归的核心在于对每个节点进行以下检查: 1. **节点的左子树**:如果存在左子树,那么左子树的所有节点的键必须小于当前节点的键。 2. **节点的右子树*...

    二叉排序树

    在本实验中,我们将实现一个二叉排序树的基本运算,并完成一些功能,如创建二叉排序树、判断是否为二叉排序树、查找特定节点、删除节点等。 首先,我们需要定义一个节点结构体BSTNode,包括一个整数类型的关键字key...

    js代码-12.4 判断是否为二叉搜索树

    js代码-12.4 判断是否为二叉搜索树

    常见的二叉树面试题大汇总(涵盖二叉搜索树)

    1. 判断是否为二叉搜索树:通过递归或迭代遍历所有节点,验证每个节点的值是否满足二叉搜索树的条件。 2. 二叉树的深度:通过递归计算从根节点到叶子节点的最大路径长度。 3. 平衡二叉树:如AVL树和红黑树,保证树...

    编程题型_managed9df_leetcode_二叉搜索树的判断_

    "二叉搜索树的判断"通常指的是编写一个函数来验证给定的二叉树是否符合二叉搜索树的定义。这个问题是数据结构和算法学习中的基础题型,有助于理解和应用递归、深度优先搜索(DFS)或广度优先搜索(BFS)等概念。在...

    java-leetcode题解之第98题验证二叉搜索树.zip

    题目要求编写一个函数,输入一个二叉树的根节点,判断该树是否为二叉搜索树。这个题目可以采用递归或非递归的方法来解决,主要考察的是对二叉搜索树特性和树遍历的理解。 **解决方案** 可能包括以下步骤: 1. **...

    写一算法,判断一棵二叉树是否是一棵二叉排序树。

    根据给定的文件信息,我们将深入探讨如何通过不同的方法来判断一棵二叉树是否为二叉排序树(Binary Search Tree, BST)。二叉排序树是一种特殊的二叉树,它满足以下条件: 1. 若左子树不为空,则左子树上所有节点的...

    判断二叉搜索树的前序遍历

    《剑指offer》面试题24的相关题目。输入一个整数数组,判断该数组是不是某二叉搜索树的前序遍历。假设输入的数组的任意两个数字互不相同。

    二叉搜索树实例练习

    在给定的实例练习中,我们看到一个具体的问题:判断两个序列是否能构建出相同的二叉搜索树。这个问题可以通过构建二叉搜索树,然后进行先序遍历来解决。先序遍历的顺序是:根节点 -&gt; 左子树 -&gt; 右子树。如果两个序列...

    算法面试通关40讲完整课件 18-20 树、二叉树、二叉搜索树

    1. **验证二叉搜索树 (Validate Binary Search Tree)**:给定一个二叉树,判断它是否是有效的二叉搜索树。 2. **二叉搜索树的最近公共祖先 (Lowest Common Ancestor of a Binary Search Tree)**:在二叉搜索树中找到...

    二叉搜索树问题,数据结构课程设计

    ### 二叉搜索树问题,数据结构课程设计 在计算机科学领域中,数据结构是算法设计的基础之一。其中,二叉搜索树(Binary Search Tree, BST)作为一种重要的非线性数据结构,具有快速查找、插入与删除等特性,在实际...

    二叉搜索树用C++编写的一个程序

    在实际的`insertNode`、`searchNode`、`deleteNode`和`inorderTraversal`函数中,我们需要根据二叉搜索树的性质进行相应的逻辑判断,确保插入的节点符合其规则,查找节点时遵循“左小右大”的原则,删除节点时维护树...

Global site tag (gtag.js) - Google Analytics