判断是否为二叉排序树

中序遍历二叉排序树一定是一个递增序列

所以根据这一条 判断即可

int pre = -INF;
bool check(Bitree T)
{
    if(T == NULL) reutrn false;

    if(check(T->lchild) && T->data > pre)
    {
        pre = T->data;
    }
    else return false;
    return check(T->rchild);
}

原文地址:https://www.cnblogs.com/WTSRUVF/p/11205716.html

时间: 2024-10-17 06:49:15

判断是否为二叉排序树的相关文章

二叉排序树查找所在层次 与判断是否为二叉排序树

二叉排序树 二叉排序树的递归查找 二叉排序树的插入 二叉排序树的创建 二叉排序树的删除 提示:判断是否为二叉排序树时,根据二叉排序树的性质,在进行中序遍历的时候,当前结点的值总是大于前驱结点的值, 需要在遍历时保存前驱结点的值,这样有利于进行判断,基于这样的思路来进行解题. #include <iostream> using namespace std; #define ENDFLAG -1 //char a[10]={'5','6','7','2','1','9','8','10','3',

【LeetCode】98. Validate Binary Search Tree -判断是否为二叉排序树

一.描述: 二.思路: 二叉排序树(BST),中序遍历的结果一定是非递减序列(来自百度百科): 本题中对于BST的定义是要么大于,要么小与,即遍历结果只能是递增序列,故可以通过判断中序遍历的结果序列是否是递增序列,来判断是否为合法BST: 另一种方法是使用递归: 三.代码: 1.非递归,通过中序遍历结果判断: /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left;

判断二叉树是否二叉排序树(BST)

算法思想:由于二叉排序树的中序遍历可以得到一个有序的序列,因此,我们可以使用中序遍历进行求解. 代码如下: 1 #include <stack> 2 using namespace std; 3 4 typedef struct BinaryTree 5 { 6 int data; 7 BinaryTree *lc; 8 BinaryTree *rc; 9 }BTNode,*BinaryTree; 10 11 bool isBST(BinaryTree T) 12 { 13 int preva

Validate Binary Search Tree,判断是否是二叉排序树

算法分析:两种方法,一种是中序遍历,然后得到一个序列,看序列是否是有序的.第二种,是用递归. 中序遍历: public class Solution { List<Integer> list = new ArrayList<>(); public boolean isValidBST(TreeNode root) { if(root == null) { return true; } inorderTraversal(root); for(int i = 0; i < lis

判断一棵树是否为二叉排序树

今天看到了一段判断是否为二叉排序树的代码,感觉有点问题,在网上一搜还真有不少这么做的 原本的思路大概是这样的吧,判断根节点值是否比左子节点的值大且比右子节点的值小,若成立,递归判断左子右子.不成立返回false,代码就不贴了. 想了一下,如果下面这样的树是不是也判定为二叉排序树,但是根据定义,这不是一个二叉排序树... 下面来看定义,百度就有.. 二叉排序树(Binary Sort Tree)又称二叉查找树(Binary Search Tree),亦称二叉搜索树. 它或者是一棵空树:或者是具有下

C++ 判断一颗树腾讯分是分网站开发否是BST(二叉排序树)

因为腾讯分分网站开发haozbbs.com Q1446595067二叉排序树的中序遍历结果是递增的,所以可以通过中序遍历存储结果,再判断是否为递增的数组.1) 对树进行中序遍历,将结果保存在b[]数组中.2) 检测b[]数组中元素是否为升序排列.如果是,则这棵树为BST.时间复杂度: O(n) 代码如下: #include<iostream> #include<algorithm> using namespace std; typedef struct BinaryTreeNode

树的一些操作

1 #include <iostream> 2 #include <cmath> 3 #include <queue> 4 #include <stack> 5 using namespace std; 6 7 struct Treenode 8 { 9 int data; 10 Treenode *left, *right; 11 }; 12 // 求树高 13 int height(Treenode* root) 14 { 15 if(!root) 16

二叉树的建立基本操作(链表方式)

学习数据结构,一直对二叉树不了解,对指针的调用一知半解.这二天学二叉树,搞懂了一点点,先写出代码,以后再边学习边来改进. #include <stdlib.h> #include <stdio.h> typedef char DataType; typedef struct node { DataType data; struct node *lchild; struct node *rchild; }BinTNode,*BinTree; void createB(BinTree

PAT-A1135. Is It A Red-Black Tree (30)

已知先序序列,判断对应的二叉排序树是否为红黑树.序列中负数表示红色结点,正数表示黑色结点.该序列负数取绝对值后再排序得到的是中序序列.根据红黑树的性质判断它是否符合红黑树的要求.考察了根据先序序列和中序序列建树和DFS. 1 //#include "stdafx.h" 2 #include <iostream> 3 #include <algorithm> 4 5 using namespace std; 6 7 struct treeNode { // tre