二叉排序樹或者是一棵空樹,或者是具有下列性質的二叉樹:
(1)若左子樹不空,則左子樹上所有結點的值均小於它的根結點的值;
(2)若右子樹不空,則右子樹上所有結點的值均大於它的根結點的值;
(3)左、右子樹也分別為二叉排序樹;
(4)沒有鍵值相等的結點。
完全二叉樹:只有最下面的兩層結點度能夠小於2,並且最下面一層的結點都集中在該層最左邊的若干位置的二叉樹。
給出n個數,且這n個數構成1至n的排列。現在需要你按順序構建一棵二叉排序樹,並按照層次遍歷的方式輸出它,然後判斷它是否是一棵完全二叉樹。
輸入包含兩行。第一行為乙個正整數n;第二行為1至n的排列。
輸出包含兩行。第一行為構建出的二叉排序樹的層次遍歷;第二行判斷是否是完全二叉樹:若是輸出yes,否則輸出no。
10
7 9 8 4 6 2 10 1 5 3
7 4 9 2 6 8 10 1 3 5
yes
5
3 4 5 2 1
3 2 4 1 5
no
樣例1:/
樣例2:/
對於100%的資料,1≤n≤20
先認為第乙個讀入的數是樹的根,然後每讀入乙個數,依次與已經存在的節點進行比較(見build函式);
然後從第乙個節點掃瞄,如果有是0的節點輸出no;
**:
#include#include#include#include#includeusing namespace std;const int n=1000010;
bool flag;
int tree[n];
int n,num,ma;
void build(int jd)
}else
} }ma=max(ma,tot);
}int main()
build(num);
} for(int i=1; i<=ma; i++)
printf("\n");
if(!flag)
printf("yes\n");
else
printf("no\n");
return 0;
}
572 完全二叉排序樹
題面 哼,這個題目真的很簡單啊。原諒我最開始把題面看錯了。實際上就是呢以第乙個點為樹根結點,然後將每個讀進來的結點比對並插入樹中。唯一的問題呢,就是陣列大小的問題。md。陣列開100的話只有90分。所以,自重嘍 1 include2 include3 include4 include5 includ...
二叉排序樹
在複習資料結構,把這個東西總結一下。這種結構是動態查詢表,這種動態是相對靜態查詢 順序查詢,折半查詢,分塊查詢等 來說的。對於各種靜態鍊錶,要達到查詢複雜度為o logn 必須要求有序 而要使插入刪除複雜度為o 1 必須是鍊錶儲存。動態查詢表就可以同時滿足這兩者。動態查詢表的特點是表結構本身在查詢過...
二叉排序樹
name 二叉排序樹相關操作 author unimen date 2011 10 8 13 14 21 刪除結點比較麻煩,總結如下 4大種情況 1 結點p無右孩子 將該點的左孩子變為其在雙親中的同位孩子 1 p為其雙親的左孩子時將其的左孩子變為雙親的左孩子 2 p為其雙親的右孩子時將其的左孩子變為...