7 6 二叉搜尋樹的結構 30分

2021-10-10 08:38:25 字數 1769 閱讀 8301

給定一系列互不相等的整數,將它們順次插入一棵初始為空的二叉搜尋樹,然後對結果樹的結構進行描述。你需要能判斷給定的描述是否正確。例如將插入後,得到一棵二叉搜尋樹,則陳述句如「2是樹的根」、「1和4是兄弟結點」、「3和0在同一層上」(指自頂向下的深度相同)、「2是4的雙親結點」、「3是4的左孩子」都是正確的;而「4是2的左孩子」、「1和3是兄弟結點」都是不正確的。

輸入在第一行給出乙個正整數n(≤100),隨後一行給出n個互不相同的整數,數字間以空格分隔,要求將之順次插入一棵初始為空的二叉搜尋樹。之後給出乙個正整數m(≤100),隨後m行,每行給出一句待判斷的陳述句。陳述句有以下6種:

題目保證所有給定的整數都在整型範圍內。

對每句陳述,如果正確則輸出yes,否則輸出no,每句佔一行。

5

2 4 1 3 0

82 is the root

1 and 4 are siblings

3 and 0 are on the same level

2 is the parent of 4

3 is the left child of 4

1 is the right child of 2

4 and 0 are on the same level

100 is the right child of 3

yes

yesyes

yesyes

nono

no

測試點:

思路: 

用unorder_map存每個節點的深度(自頂向下)和每個節點的父親節點。

使用string自帶的find函式,查詢字串中是否含有某個字串,若沒有返回值為stirng::npos

使用sscanf函式直接提取字串中的數字。。。(這個函式是真的好用!)。

#includeusing namespace std;

struct node

;struct point;

unordered_mapq;

struct node* bt(struct node *p,int x,int fa,int level)

}else

else if(p->datar=bt(p->r,x,p->data,level+1);}}

return p;

};void test(struct node*p)

}int main()

q[r].fa=-1;

q[r].d=0;

cin>>m;

cin.get();

string s;

int f=0;

while(m--)

}else if(s.find("siblings")!=string::npos)

}else if(s.find("level")!=string::npos)

}else if(s.find("parent")!=string::npos)

}else if(s.find("left")!=string::npos)

}if(q[x].d==-1||q[y].d==-1&&y!=-1)f=0;

if(f) cout<

else cout<

}return 0;

}

7 6 是否完全二叉搜尋樹(30 分)

將一系列給定數字順序插入乙個初始為空的二叉搜尋樹 定義為左子樹鍵值大,右子樹鍵值小 你需要判斷最後的樹是否一棵完全二叉樹,並且給出其層序遍歷的結果。輸入第一行給出乙個不超過20的正整數n 第二行給出n個互不相同的正整數,其間以空格分隔。將輸入的n個正整數順序插入乙個初始為空的二叉搜尋樹。在第一行中輸...

L3 016 二叉搜尋樹的結構 (30 分

l3 016 二叉搜尋樹的結構 30 分 給定一系列互不相等的整數,將它們順次插入一棵初始為空的二叉搜尋樹,然後對結果樹的結構進行描述。你需要能判斷給定的描述是否正確。例如將插入後,得到一棵二叉搜尋樹,則陳述句如 2是樹的根 1和4是兄弟結點 3和0在同一層上 指自頂向下的深度相同 2是4的雙親結點...

L3 016 二叉搜尋樹的結構 30分

給定一系列互不相等的整數,將它們順次插入一棵初始為空的二叉搜尋樹,然後對結果樹的結構進行描述。你需要能判斷給定的描述是否正確。例如將插入後,得到一棵二叉搜尋樹,則陳述句如 2是樹的根 1和4是兄弟結點 3和0在同一層上 指自頂向下的深度相同 2是4的雙親結點 3是4的左孩子 都是正確的 而 4是2的...