problem description
在樹結構中,有一種特殊的二叉樹叫做排序二叉樹,直觀的理解就是——(1).每個節點中包含有乙個關鍵值 (2).任意乙個節點的左子樹(如果存在的話)的關鍵值小於該節點的關鍵值 (3).任意乙個節點的右子樹(如果存在的話)的關鍵值大於該節點的關鍵值。現給定一組資料,請你對這組資料按給定順序建立一棵排序二叉樹,並輸出其中序遍歷的結果。
input。
第一行包含乙個整數n,為關鍵值的個數,關鍵值用整數表示。(n<=1000)
第二行包含n個整數,保證每個整數在int範圍之內。
output
為給定的資料建立排序二叉樹,並輸出其中序遍歷結果,每個輸出佔一行。
example input
12
//錯誤**: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值最大的結點 即左子樹中最右邊的結點 若乙個結點沒有左子樹 若該結點是其父結點的右孩子,那麼該結點的前驅結點即為其父結點。若該...