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

1、算法思想

该算法的实现是借助中序遍历来实现的,因为我们知道符合要求的二叉排序树的特点是父节点的值大于左子树的值但是小于右子树的值,所以借助在每一棵子树都有这样的特点,可以设计实现对二叉排序树的判断!
分别在左右孩子同时存和一个存在一个不存在的情况下来实现算法!
当然该算法也可以直接使用先序遍历来实现!每当访问一个结点的时候就判断当前结点和孩子结点的大小关系!如果不满足二叉排序树的特点可以直接返回结果!

2、算法实现

——————————————————————————————————————————————————
#include<string.h>
#include<stdio.h>
#define MaxSize 20
#include
#include<stdlib.h>
#include “queue”
#define endl ‘\n’
using namespace std;
typedef struct BiTNode{ //结点
char data; //数据域
struct BiTNode *lchild,*rchild; //指针域
}BiTNode,*BiTree;
——————————————————————————————————————————————————
//先序遍历的顺序建立二叉链表
void CreateTree(BiTree &T){
char ch;
cin>>ch;
if (ch == ‘#’) T = NULL; //递归结束,建立空树
else{
T = new BiTNode; //申请一个结点
T->data = ch; //将输入值赋值给T
CreateTree(T->lchild); //递归创建左子树
CreateTree(T->rchild); //递归创建右子树
}
}
——————————————————————————————————————————————————
//先遍历输出
void PreOrder(BiTree T){
if(T != NULL){
cout<data<<" “; //递归打印当前节点
PreOrder(T->lchild); //递归输出左子树
PreOrder(T->rchild); //递归输出右子树
}
}
——————————————————————————————————————————————————
int IsSortTree(BiTree &T){
if(T != NULL){ //若二叉树非空 if(T)
IsSortTree(T->lchild); //中序遍历左子树
if (T->lchild != NULL && T->rchild != NULL){
if ((T->lchild->data > T->data) || (T->data > T->rchild->data)) //左孩子的值大于父节点的值或者父节点的值大于右孩子的值
return 0;
}
if (T->lchild == NULL && T->rchild != NULL){ //左孩子为空,但是右孩子不为空
if (T->data > T->rchild->data) return 0;
}
if (T->rchild == NULL && T->lchild != NULL){ //右孩子为空,但是左孩子不为空
if (T->data < T->lchild->data) return 0;
}
IsSortTree(T->rchild); //中序遍历右子树
}
return 1;
}
——————————————————————————————————————————————————
//按照中序遍历输出创建的二叉树
void InOrderTraverse(BiTree T){
//中序遍历的二叉排序树的递归算法
if(T != NULL){ //若二叉树非空 if(T)
InOrderTraverse(T->lchild); //中序遍历左子树
cout<data<<” "; //访问根节点
InOrderTraverse(T->rchild); //中序遍历右子树
}
}

int main(){
BiTree T;
cout<<“\n请输入字符!(若输入的是#代表建立的是一棵空树):”;
CreateTree(T);
cout<<“\n先序遍历输出二叉链表:”; //A B C # # D E # # G # # F # # #
//ABC##DE##G##F###
PreOrder(T);
cout<<“\n\n中序遍历输出二叉链表:”;
InOrderTraverse(T);
if(IsSortTree(T)) cout<<“\n\n!!!!!是二叉排序树!!!!!”;
else cout<<“\n\n!!!!!!不是二叉排序树!!!!!!”;
}
——————————————————————————————————————————————————
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 7
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Q渡劫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值