设二叉树以二叉链表方式存储,试完成下列问题的递归算法。 设二叉树结点和二叉树结构体定义如下: typedef struct btnode { ElemType element; struct btnode* lchild, *rchild; }BTNode; typedef struct binarytree{ BTNode* root; }BinaryTree; (1)求一棵二叉树的高度; int Depth(BTNode *p) { int lh, rh; if (!p) return 0; lh = ______________; rh = _____________; if (lh > rh) return _________; else return ________; } int DepthofBT(BinaryTree Bt) { return ___________; } (2)求一棵二叉树中的结点个数; int Size(BTNode * p) { if (!p) return _____ ; else return Size(p->lchild)+______________+1; } int SizeofBT(BinaryTree Bt) { return ______________); } (3)交换一棵二叉树中每个结点的左、右子树。 void exchange ( BTNode * p) { if(!p) return; if ( p->lchild != NULL || p->rchild != NULL ) { temp = p->lchild; p->lchild = ____________; p->rchild = temp; exchange (___________ ); exchange ( p->rchild ); } } void exchange(BinaryTree *bt) { ____________________; }
时间: 2023-06-07 16:11:51 浏览: 303
(1) 求一棵二叉树的高度:
int Depth(BTNode *p) {
int lh, rh;
if (!p) return 0;
lh = Depth(p->lchild);
rh = Depth(p->rchild);
if (lh > rh) return lh + 1;
else return rh + 1;
}
int DepthofBT(BinaryTree Bt) {
return Depth(Bt.root);
}
(2) 求一棵二叉树中的结点个数:
int Size(BTNode *p) {
if (!p) return 0;
else return Size(p->lchild) + Size(p->rchild) + 1;
}
int SizeofBT(BinaryTree Bt) {
return Size(Bt.root);
}
(3) 交换一棵二叉树中每个结点的左、右子树:
void exchange(BTNode *p) {
BTNode *temp;
if(!p) return;
if (p->lchild != NULL || p->rchild != NULL) {
temp = p->lchild;
p->lchild = p->rchild;
p->rchild = temp;
exchange(p->lchild);
exchange(p->rchild);
}
}
void exchange(BinaryTree *bt) {
exchange(bt->root);
}
阅读全文