题目不难,怎奈小女能力太差~~~555
请各位大侠伸出援助之手,数据结构,以C语言解答
9、三个结点可以构造出多少棵不同的树?又可以构造出多少棵不同的二叉树?请绘图说明。
10、如果二叉树的后序遍历序列为abcdefghi,中序遍历序列为abdciehfg,请恢复这棵二叉树。
11、编写一个递归算法,计算二叉树的深度。
12、编写一个非递归算法,交换二叉树的左子树和右子树。
13、编写一个非递归算法,查找二叉分类树中值为b的结点。
參考答案:struct Tree {
int value;
Tree* left, right;
Tree() {
left = right = 0;
}
~Tree() {
delete left;
delete right;
}
};
11)
int getHeight(Tree* root) {
if (root == 0) {
return 0;
}
return max(getHeight(root->left) + 1, getHeight(root->right) + 1);
}
12)
void changeChildren(Tree* root) {
if (root == 0) {
return;
}
deque<Tree*> que;
que.push_back(root);
while (!que.empty()) {
Tree* t = que.front(); que.pop_front();
swap(t->left, t->right);
que.push_back(t->left);
que.push_back(t->right);
}
}
13)
int count(Tree* root, int b) {
if (root == 0) {
return 0;
}
int ret = 0;
deque<Tree*> que;
que.push_back(root);
while (!que.empty()) {
Tree* t = que.front(); que.pop_front();
if (t->value == b) {
ret++;
}
que.push_back(t->left);
que.push_back(t->right);
}
return ret;
}