二叉樹查找樹算法實現

2022-11-22 05:21

1個回答
#include
#include
#define OK 1
#define ERROR 0
#define OVERFLOW -1
#define EQ(a,b) ((a)==(b))
#define LT(a,b) ((a)<(b))
typedef int ElemType;
typedef int Status;
typedef struct TElemType{
int key;
int num;
}TElemType;
typedef struct BiTNode{
TElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

Status SearchBST(BiTree T,int key,BiTree f,BiTree &p){
if(!T) { p=f; return ERROR;}
else if(EQ(T->data.key,key)) { p=T; return OK; }
else if(LT(key,T->data.key))
return SearchBST(T->lchild,key,T,p);
else return SearchBST(T->rchild,key,T,p);
}
Status SearchBST1(BiTree T,int key,BiTree f,BiTree &p){
if(!T) { p=f; return ERROR;}
else if(EQ(T->data.key,key)) {
printf("%d %d",p->data.key,p->data.num);
p=T; return OK; }
else if(LT(key,T->data.key))
return SearchBST(T->lchild,key,T,p);
else return SearchBST(T->rchild,key,T,p);
}
Status InsertBST(BiTree &T,TElemType e){
BiTree s,p;
if(!SearchBST(T,e.key,NULL,p)){
s=(BiTree)malloc(sizeof(BiTNode));
s->data=e;
s->lchild=s->rchild=NULL;
if(!p) T=s;
else if(LT(e.key,p->data.key)) p->lchild=s;
else p->rchild=s;
return OK;
}
}
Status Output(TElemType e){
printf("%d ",e.key);
printf("%d\n",e.num);
}
Status PreOrderTraver( BiTree T){//二叉樹先序遍歷
if(T==NULL) return ERROR;
else{
Output(T->data);
PreOrderTraver(T->lchild);
PreOrderTraver(T->rchild);}
return OK;
}
int main()
{
BiTree T,f=NULL,q;
TElemType a;
int i,n,b;
printf("請輸入你要創(chuàng)建的二叉排序樹的結點個數:\n");
scanf("%d",&n);
for(i=0;i scanf("%d",a.key);
scanf("%d",a.num);
InsertBST(T,a);
}
printf("請輸入你要查找的關鍵字: ");{
scanf("%d",b);
if(SearchBST1(T,b,f,q)) printf("查找成功!\n");
else printf("查找失敗!\n");}
printf("二叉樹的先序遍歷:\n");
PreOrderTraver(T);
system("pause");
return 0;
}
這個就是!希望可以幫助你!
相關問答
滿二叉樹和完全二叉樹的區(qū)別
1個回答2025-01-09 00:11
滿二叉樹——除了葉結點外每一個結點都有左右子女且葉結點都處在最底層的二叉樹,。(這個似乎很好想像出來) 完全二叉樹——只有最下面的兩層結點度小于2,并且最下面一層的結點都集中在該層最左邊的若干位置的二...
全文
堆是完全二叉樹,完全二叉樹不一定是堆?對嗎?
1個回答2025-01-09 08:45
堆的邏輯結構就是完全二叉樹,并且要求其中結點的關鍵字有某種序(最大堆是雙親結點的關鍵字大于等于孩子結點的關鍵字,最小堆是雙親結點的關鍵字小于等于孩子結點的關鍵字) 至于完全二叉樹,即使是結點有關鍵...
全文
堆是一種什么結構?圖,線性表,二叉樹,還是算法?
1個回答2025-01-06 08:06
數據結構。一般堆棧的說法是連起來叫的,堆棧都是一種數據項按序排列的數據結構。詳細請查看下面的鏈接
二叉樹葉子結點怎么算二叉樹葉子結點如何算
1個回答2022-10-16 03:17
1、結點的度是指,該結點的子樹的個數,在二叉樹中,不存在度大于2的結點。 2、計算公式:n0=n2+1,n0是葉子節(jié)點的個數,n2是度為2的結點的個數,n0=n2+1=5+1=6。 3、故二叉樹有5個...
全文
多大的樹算大樹
3個回答2023-06-03 22:24
大或者不大并不是只按具體的尺寸來說得了的,還要看是什么樹。也就是說是一個相對數。比如說有些樹種能長到30米以上,甚至40米以上,那十幾米的樹肯定不能說是大啦。如果有個樹種,平常見到的最多也就十米以下,...
全文
二叉樹和二叉排序樹有啥區(qū)別
3個回答2022-10-22 02:35
二叉樹和二叉排序樹區(qū)別為:子樹結點不同、鍵值相等不同、子樹樹型不同。 一、子樹結點不同 1、二叉樹:二叉樹的左/右子樹上所有結點的值可以大于、等于和小于它的根結點的值。 2、二叉排序樹:二叉排...
全文
什么是完全二叉樹,平衡二叉樹,二叉排序樹
1個回答2022-10-27 07:51
首先平衡二叉樹是特殊的二叉排序樹,他的結點元素間存在著偏序關系。 其次相對于一般的二叉排序樹,平衡二叉樹的左右子樹的深度差也有不超過1層的約束。 這樣使得平衡樹是同種元素序列情況下的深度最小的二叉排序...
全文
什么是二叉樹
2個回答2022-12-16 18:32
二叉樹(Binary tree)是樹形結構的一個重要類型。是指樹中節(jié)點的度不大于2的有序樹,它是一種最簡單且最重要的樹。 二叉樹的遞歸定義為:二叉樹是一棵空樹,或者是一棵由一個根節(jié)點和兩棵互不...
全文
二叉查找樹的建立問題
1個回答2023-05-02 22:33
void BiSoTree::Search_Inseart(Node *p,int k) // 也可以不用傳Root過去,直接在函數里使用Root,Node *p=Root;{ ...
全文
二叉查找樹遍歷問題
1個回答2023-05-06 02:46
最簡單的辦法就是寫一個遞歸中序遍歷的就可以了
熱門問答