九度提供的演算法設計思路是:對輸入的數字序列構建二叉排序樹,並對它們進行前序和中序的遍歷,依次比較遍歷結果是否相同,若相同則說明兩棵二叉排序樹相同,否則不同。
這個設計思路是沒有問題的,但是有點畫蛇添足的成份。那麼這個「蛇足」是什麼呢?試想一下二叉排序樹的性質,如果對二叉排序樹來說,對其進行中序遍歷,那麼無論一組數字按照怎樣的順序構建,其中序遍歷後得到的序列都是一樣的。例如題目給的測試例項,和,他們構造的二叉排序樹如下:
其中序遍歷得到序列都是。所以說進行中序遍歷作為判斷的一項是「蛇足」。
對於該題,我們只須對建立的二叉樹進行先序遍歷,或者後序遍歷得到它們的遍歷序列進行比較即可。
原始碼如下:
//premain儲存原二叉樹先序遍歷的序列
//preother儲存與原二叉樹比較的二叉樹的先序遍歷的序列
char premain[11], preother[11
];struct
bstnode;
bstnode*allocatenode()
else
return
nullptr;
}bstnode* builtbstree(bstnode*t, int
value)
else
if (t->value >value)
t->lchild = builtbstree(t->lchild, value);
else
if (t->value
t->rchild = builtbstree(t->rchild, value);
returnt;}
int size = 0
;void preorderbst(bstnode *root, char
prearray)
if (root->lchild !=nullptr)
if (root->rchild !=nullptr)
}
判斷是否同一棵二叉搜尋樹
給定乙個插入序列就可以唯一確定一棵二叉搜尋樹。然而,一棵給定的二叉搜尋樹卻可以由多種不同的插入序列得到。例如分別按照序列和插入初始為空的二叉搜尋樹,都得到一樣的結果。於是對於輸入的各種插入序列,你需要判斷它們是否能生成一樣的二叉搜尋樹。輸入格式 輸入包含若干組測試資料。每組資料的第1行給出兩個正整數...
是否同一棵二叉搜尋樹
5 4 是否同一棵二叉搜尋樹 25分 給定乙個插入序列就可以唯一確定一棵二叉搜尋樹。然而,一棵給定的二叉搜尋樹卻可以由多種不同的插入序列得到。例如分別按照序列和插入初始為空的二叉搜尋樹,都得到一樣的結果。於是對於輸入的各種插入序列,你需要判斷它們是否能生成一樣的二叉搜尋樹。輸入包含若干組測試資料。每...
是否同一棵二叉搜尋樹
04 樹4 是否同一棵二叉搜尋樹 25 分 給定乙個插入序列就可以唯一確定一棵二叉搜尋樹。然而,一棵給定的二叉搜尋樹卻可以由多種不同的插入序列得到。例如分別按照序列和插入初始為空的二叉搜尋樹,都得到一樣的結果。於是對於輸入的各種插入序列,你需要判斷它們是否能生成一樣的二叉搜尋樹。輸入格式 輸入包含若...