二叉搜尋樹 HDU 3791

2021-09-28 14:52:01 字數 1169 閱讀 5895

oj:

題意:給你乙個長度不大於10的只有數字的字串,字串中不包含重複數字。

將這個字串按順序插入二叉搜尋樹。

然後再給你一些字串,條件與上面一樣。判斷這些字串生成的二叉搜尋樹與第乙個字串生成的二叉搜尋樹是不是一樣的!

思路:將第乙個串插入二叉搜尋樹,前序遍歷得到遍歷結果,然後後面來的每乙個字串也插入二叉搜尋樹,也進行前序比遍歷,然後判斷是否前序遍歷結果是否與第乙個相同。雖然說前序遍歷不能唯一確定一棵樹的結構,乙個前序遍歷的序列可能對應多個樹。但是,因為我們的樹是乙個二叉搜尋樹,情況就不同了。首先基本的兩個樹的前序遍歷結果相同,那麼其中包含的字元肯定相同,如果字元相同,在二叉搜尋樹中字元之間的左右位置關係也可以確定下來,左右位置關係確定下來了,前序遍歷結果也就確定下來了。因為前序遍歷先遍歷根,然後遍歷其左邊,在遍歷右邊。

類似於我們的前序遍歷和中序遍歷確定乙個二叉搜尋樹,前序確定根,中序確定左右關係,唯一確定了乙個二叉搜尋樹。

這裡也是,二叉搜尋樹確定左右關係,前序確定根,唯一確定了乙個二叉搜尋樹

#include#include#includetypedef struct nodenode;

node nodes[30];

int useindex;

int index;

void init()

}int insert(int root,int v)

if(nodes[root].v > v)else

}elseelse

}}void pre(int* res,int root)

if(nodes[root].right!=-1)

}int main()

// 儲存字串

char s[30];

// 儲存第乙個字串的前序遍歷結果

int t[30];

// 儲存後面的字串的前序遍歷結果

int st[30];

scanf("%s",s);

init();

int len = strlen(s);

for(int i=0;ipre(t,0);

for(int i=0;ipre(st,0);

int flag = 1;

for(int j=0;j}

if(flag)}}

}}

hdu3791二叉搜尋樹

hdu3791二叉搜尋樹 又是二叉搜尋樹的前序遍歷。1.建樹會順序影響整棵樹的形狀 2.記得釋放資源 3.可以用雙重指標和引用優化程式。某些printf 是之前設定的斷點,可以無視之 includeusing namespace std struct bst root bst insert bst ...

hdu 3791 二叉搜尋樹

problem description 判斷兩序列是否為同一二叉搜尋樹序列 input 開始乙個數n,1 n 20 表示有n個需要判斷,n 0 的時候輸入結束。接下去一行是乙個序列,序列長度小於10,包含 0 9 的數字,沒有重複數字,根據這個序列可以構造出一顆二叉搜尋樹。接下去的n行有n個序列,每...

HDU 3791 二叉搜尋樹

problem description 判斷兩序列是否為同一二叉搜尋樹序列 input 開始乙個數n,1 n 20 表示有n個需要判斷,n 0 的時候輸入結束。接下去一行是乙個序列,序列長度小於10,包含 0 9 的數字,沒有重複數字,根據這個序列可以構造出一顆二叉搜尋樹。接下去的n行有n個序列,每...