二叉排序樹的中序遍歷

2021-08-05 23:19:50 字數 1471 閱讀 2506

problem description

在樹結構中,有一種特殊的二叉樹叫做排序二叉樹,直觀的理解就是——(1).每個節點中包含有乙個關鍵值 (2).任意乙個節點的左子樹(如果存在的話)的關鍵值小於該節點的關鍵值 (3).任意乙個節點的右子樹(如果存在的話)的關鍵值大於該節點的關鍵值。現給定一組資料,請你對這組資料按給定順序建立一棵排序二叉樹,並輸出其中序遍歷的結果。

input。

第一行包含乙個整數n,為關鍵值的個數,關鍵值用整數表示。(n<=1000)

第二行包含n個整數,保證每個整數在int範圍之內。

output

為給定的資料建立排序二叉樹,並輸出其中序遍歷結果,每個輸出佔一行。

example input

1

2

//錯誤**:time limit exceeded

bitree creatbitree(bitree r,int m)

if(mdata) //1:系統不執行:這個地方沒加else,我以為只要在while裡迴圈就行了,當q為空,直接跳出,

q = q->lchild; //2:只判斷了大於小於,沒判讀等於,如果為等於號,那麼一直在while裡迴圈,所以造成time limit}}

if(m>w->data)

w->rchild = p;

else

w->lchild = p;

return r;

}/*time limit 出現的原因:

很多時候我們看到time limit exceeded馬上會想到一定是演算法太慢,不符合要求,其實往往還可能遇到一種情況是沒有判斷輸入結束,不然

系統一直在那等你的輸出結果,發現你一直不輸出,或者程式一直不退出,所以給time limit exceeded。

*///下面是完整的**:

#include #include #define maxsize 10001

int j;

typedef struct bitnode

bitnode,*bitree;

bitree creatbitree(bitree r,int m)

else if(m<=q->data) //加了乙個else,乙個等於號

}if(m>w->data)

w->rchild = p;

else

w->lchild = p;

return r;

}bitree initbitree() //初始化頭結點

void midprint(bitree root)//中序輸出

else

printf(" %d",root->data);

midprint(root->rchild);

}}int main()

midprint(root);

printf("\n");

return 0;

}

c 二叉排序樹 中序遍歷

cpp 二叉排序樹 儘管二叉排序樹很簡單,但是第一次寫二叉排序樹的類,還是有一點的麻煩。不知道如何寫遞迴,如何寫成員函式等。第一次總是會很糾結的,所以發篇博文來紀念下自己寫的 第乙個c 類 by mr zys include include define maxn 10000 using names...

二叉排序樹的中序遍歷必然遞增

題目引出的思考 前面學習中,一般都是需要前序 中序或者後序 中序才能構建出一顆二叉樹,故本道題中一開始並未給出中序遍歷,心中疑惑便出,是否該二叉樹不唯一?再細看是二叉排序樹,仔細分析顯然可得二叉排序樹中的中序遍歷必然是遞增的,故排除自己的錯誤想法。證明 如果一棵非空二叉樹 所有結點值均不相同 的中序...

樹 尋找二叉排序樹的前驅後繼(中序遍歷)

前驅結點 結點val值小於該結點val值並且值最大的結點 後繼結點 結點val值大於該結點val值並且值最小的結點 若乙個結點有左子樹,那麼該結點的前驅節點是其左子樹中val值最大的結點 即左子樹中最右邊的結點 若乙個結點沒有左子樹 若該結點是其父結點的右孩子,那麼該結點的前驅結點即為其父結點。若該...