日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

判断给定的二叉树是否为二叉排序树

發布時間:2024/7/5 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 判断给定的二叉树是否为二叉排序树 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

思路:若它的左子樹不空,則左子樹上所有結點的值均小于它的根結點的值;
若它的右子樹不空,則右子樹上所有結點的值均大于它的根結點的值;
它的左、右子樹也分別為二叉排序樹。

遞歸遍歷就可以了,反正就是左孩子的key比根節點的key小,右孩子的key比根節點的key大,一旦有不滿足條件的就判定不是。

完整的代碼如下:

#include "stdio.h" #include "stdlib.h" typedef struct node {int data;struct node *lchild,*rchild; }Bitree; Bitree *B[100]; Bitree *CreateBiTree() {int num,i,n;Bitree *t,*s;t=NULL;printf("建立二叉樹(1表示為虛結點,0表示輸入結束):/n");num=0;scanf("%d",&n);while(n!=0){s=(Bitree *)malloc(sizeof(Bitree));s->data=n;s->lchild=s->rchild=NULL;num++;if(!t)t=s;B[num]=s;scanf("%d",&n);}for(i=1;i<=num;i++){if(B[i]->data!=1){if(2*i<=num && B[2*i]->data!=1)B[i]->lchild=B[2*i];if(2*i+1<=num && B[2*i+1]->data!=1)B[i]->rchild=B[2*i+1];}}return t; } int IsSearchTree(const Bitree *t) //遞歸遍歷二叉樹是否為二叉排序樹 {if(!t) //空二叉樹情況return 1;else if(!(t->lchild) && !(t->rchild)) //左右子樹都無情況return 1;else if((t->lchild) && !(t->rchild)) //只有左子樹情況{if(t->lchild->data>t->data)return 0;elsereturn IsSearchTree(t->lchild);}else if((t->rchild) && !(t->lchild)) //只有右子樹情況{if(t->rchild->data<t->data)return 0;elsereturn IsSearchTree(t->rchild);}else //左右子樹全有情況{ if((t->lchild->data>t->data) || (t->rchild->data<t->data))return 0;elsereturn ( IsSearchTree(t->lchild) && IsSearchTree(t->rchild) );} } int main(void) {int flag=0;Bitree *tree;tree=CreateBiTree();flag=IsSearchTree(tree);if(flag)printf("這棵樹是二叉排序樹!/n");elseprintf("這棵樹不是二叉排序樹!/n");system("pause");return 0; }

?

?

總結

以上是生活随笔為你收集整理的判断给定的二叉树是否为二叉排序树的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。