要求:
輸入:
判斷兩序列是否為同一二叉搜尋樹序列 input開始乙個數n(1<=n<=20) ,表示有n個需要判斷,n= 0 的時候輸入結束。
接下去一行是乙個序列,序列長度小於10,包含(0~9)的數字,沒有重複數字,根據這個序列可以構造出一顆二叉搜尋樹。
接下去的n行有n個序列,每個序列格式跟第乙個序列一樣,請判斷這兩個序列是否能組成同一顆二叉搜尋樹。
輸出:
如果序列相同則輸出yes,否則輸出no
sample input
2567432
543267
576342
0sample output
yes
no
#include#includestruct nodetree[110];
int loc;
node *creat()
char str1[25], str2[25]; //儲存二叉排序樹的遍歷結果,
//將每一棵樹的前序遍歷得到的字串與中序遍歷得到的字串連線
//得到遍歷結果字串
int size1, size2; //儲存在字元陣列中的遍歷得到字元個數
char *str; //當前正在儲存字串
int *size; //當前正在儲存字串中的個數
void postorder(node *t)
void inorder(node *t)
void preorder(node *t)
node *insert(node *t, int x)
else if (x < t->c) //若x小於根結點數值
t->lchild = insert(t->lchild, x);//插入到左子樹上
else if (x > t->c)
t->rchild = insert(t->rchild, x);
return t;
}int main()
size1 = 0; //儲存在第乙個字串中的字元初始化為0
str = str1; //將正在儲存字串設定為第乙個字串
size = &size1;
preorder(t);
inorder(t);
str1[size1] = 0; //向第乙個字串的最後乙個字元新增空字元,方便使用字串函式
while (n-- != 0)
size2 = 0;
str = str2;
size = &size2;
preorder(t2);
inorder(t2);
str2[size2] = 0;
puts(strcmp(str1, str2) == 0 ? "yes" : "no");
} }return 0;
}
每日一題 98 驗證二叉搜尋樹
今天是2020年5月5日,星期二,時隔好幾天沒有在寫每日一題,因為五一期間自己也有一些事情,最近還生病打點滴。給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。假設乙個二叉搜尋樹具有如下特徵 輸入 2 1 3 輸出 true 示例 2 輸入 5 1 4 3 6 輸出 false 解釋 輸入為 5,1...
Leetcode 每日一題 恢復二叉搜尋樹
level hard 題目 二叉搜尋樹中的兩個節點被錯誤地交換。請在不改變其結構的情況下,恢復這棵樹。示例 高階 使用 o n 空間複雜度的解法很容易實現。你能想出乙個只使用常數空間的解決方案嗎?思路 要充分利用二叉搜尋樹的特性。二叉搜尋樹的中序遍歷得到的序列是遞增。假設遞增序列 a 1,2,3,4...
每日一題(七) 二叉樹遍歷
二叉樹的前序 中序 後序遍歷的定義 前序遍歷 對任一子樹,先訪問根,然後遍歷其左子樹,最後遍歷其右子樹 中序遍歷 對任一子樹,先遍歷其左子樹,然後訪問根,最後遍歷其右子樹 後序遍歷 對任一子樹,先遍歷其左子樹,然後遍歷其右子樹,最後訪問根。題目 給定一棵二叉樹的前序和中序遍歷,求其後續遍歷。樣例輸入...