給定乙個插入序列就可以唯一確定一棵二叉搜尋樹。然而,一棵給定的二叉搜尋樹卻可以由多種不同的插入序列得到。例如分別按照序列和插入初始為空的二叉搜尋樹,都得到一樣的結果。於是對於輸入的各種插入序列,你需要判斷它們是否能生成一樣的二叉搜尋樹。
方法:
為每個序列建樹,並利用每棵樹的中序遍歷判斷相同
**:
#include #include #include typedef struct bstree *bst,bstree;
bst insert_tree(bst root, int key)
else
else if (root -> data < key)
return root;
}}int order1[20];
int order2[20];
int num = 0;
int num1 = 0;
void pre_tree_fir(bst root)
pre_tree_fir(root -> left);
pre_tree_fir(root -> right);
order1[num++] = root -> data;
return ;
}void pre_tree_sec(bst root)
pre_tree_sec(root -> left);
pre_tree_sec(root -> right);
order2[num1++] = root -> data;
return ;
}int main()
scanf("%d",&l);
bst root = null, root1 = null;
num = 0;
num1 = 0;
for (i = 0; i < n; i++)
pre_tree_fir(root);
while(l --)
pre_tree_sec(root1);
int flag = 1;
for (i = 0; i <= n; i++)
}if (flag)
else }}
return 0;
}
二叉樹 還原二叉樹 二叉搜尋樹
先序遍歷的特點 先遍歷根結點,再遍歷左子樹,最後再遍歷右子樹 中序遍歷的特點 先遍歷左子樹,再遍歷根結點,最後再遍歷右子樹 後序遍歷的特點 先遍歷左子樹,再遍歷右子樹,最後再遍歷根結點 舉例 先序遍歷 a b d f g h i e c 中序遍歷 f d h g i b e a c 如上,根據先序遍...
樹 二叉樹 二叉搜尋樹
給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。假設乙個二叉搜尋樹具有如下特徵 節點的左子樹只包含小於當前節點的數。節點的右子樹只包含大於當前節點的數。所有左子樹和右子樹自身必須也是二叉搜尋樹。示例 1 輸入 2 13輸出 true 示例 2 輸入 5 14 3 6輸出 false 解釋 輸入為 ...
判斷二叉樹是否為二叉搜尋樹
剛開始我想的很簡單,覺得只要遞迴判斷左孩子是否小於根節點 右孩子是否大於根節點就行了 二叉搜尋樹 左孩子 根結點 右孩子 根節點 下面的寫法 錯的!錯的!二叉樹的判斷應該是左子樹的最大值 小於 根節點 右子樹的最小值大於根節點 bool isvalidbst treenode root if roo...