博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
判断一棵二叉树是否为二叉搜索树
阅读量:5923 次
发布时间:2019-06-19

本文共 1575 字,大约阅读时间需要 5 分钟。

答案转载自:https://www.2cto.com/kf/201506/408372.html

裁判测试程序样例:

#include 
#include
typedef enum { false, true } bool;typedef int ElementType;typedef struct TNode *Position;typedef Position BinTree;struct TNode{ ElementType Data; BinTree Left; BinTree Right;};BinTree BuildTree(); /* 由裁判实现,细节不表 */bool IsBST ( BinTree T );int main(){ BinTree T; T = BuildTree(); if ( IsBST(T) ) printf("Yes\n"); else printf("No\n"); return 0;}/* 你的代码将被嵌在这里 */

 

 错误解法:

1 bool isBST(Node* node) 2 { 3   if (node == NULL) 4     return true; 5        6   //如果左孩子大于根节点,则不是BST 7   if (node->left != NULL && node->left->key> node->key) 8     return false; 9       10   //如果右孩子节点小于根节点,则不是BST11   if (node->right != NULL && node->right->key < node->key)12     return false;13     14   //递归的判断15   if (!isBST(node->left) || !isBST(node->right))16     return false;17       18   //检测完毕,所有条件通过,则是BST19   return true;20 }

这种判断方法是错误的,如下面例子所示,节点4处于根节点3的左子树中,但是函数检测到这棵树是BST.

 

正确解法:

1 //判断是否为BST 2 bool IsBST(BinTree T) 3 { 4         return(isBSTUtil( T, -10000, 10000)); 5 } 6  7 //如果是一颗二叉查找树,且值范围在[min, max],则返回true 8 bool isBSTUtil(BinTree T , int min , int max ) 9 {10         //空树也是BST11         if ( T == NULL)12                return true;13 14         //如果节点值违反了最大/最小约束条件,则不是BST15         if ( T->Data < min || T->Data > max)16                return false;17 18         //递归检查子树19         return  isBSTUtil( T->Left, min, T->Data - 1) &&20               isBSTUtil( T->Right, T->Data + 1, max);21 }

 

转载于:https://www.cnblogs.com/FengZeng666/p/9827261.html

你可能感兴趣的文章
ElasticSearch Aggregations 分析
查看>>
[PHP] curl CURLOPT_TIMEOUT_MS 小于1秒 解决方案
查看>>
JVM源码分析之不可控的堆外内存
查看>>
Navicate (数据库客户端)
查看>>
Flink 原理与实现:理解 Flink 中的计算资源
查看>>
利用C语言制作网站
查看>>
Java学习路线图
查看>>
Sed&awk笔记之sed篇:高级命令(一)
查看>>
1.3一摞烙饼的排序
查看>>
网狐棋牌游戏平台服务器架构设计分析[转]
查看>>
java代码调用使用cxf搭建的webService服务传递对象
查看>>
Spring调用spymemcached客户端的例子
查看>>
Mybatis动态sql和sql片段
查看>>
Java操作Redis DB的例子
查看>>
HLSL中的MUL指令深层剖析
查看>>
使用批处理批量删除不同文件夹下的同名文件
查看>>
[收藏学习]gcc和g++
查看>>
fuser命令详解(原创)
查看>>
linux下/dev/shm的大小引发ORA-00845: MEMORY_TARGET not supported on this system 2015-06-16 08:55:50...
查看>>
mac下无法识别手机usb问题
查看>>