二叉树的存储结构类型定义如下:
typedef int DataType;
typedef struct node
{DataType data; //data是数据域
struct node *lchild,*rchild; //分别指向左右孩子
}BinTNode;
typedef BinTNode *BinTree;
阅读下列算法,并回答问题。
int height(BinTree T)
int lhigh=0,rhigh=0;
if(T==NULL)return 0;
else{
lhigh=height(T> Ichild);
rhigh=height(T-> rchild);
if(lhigh> rhigh)return lhigh+1;
else return rhigh+1;
}
}
void f31(BinTree T)
{
int leftHigh=0,rightHigh=0;
BinTree temp;
if(T==NULL)return;
else{
if(height(T-> lchild)<height(T> rchild)){
temp=T> lchild;
T-> lchild=T-> rchild;
T-> rchild=temp;
}
}
f31(T-> lchild);
f31(T-> rchild);
return;
}
(1)设二叉树T如下图所示,画出执行f31(T)后得到的二叉树T1。
(2)给出函数f31()的功能。
【正确答案】:
(1)
(2)函数f31()的功能是:将二义树T的每个结点的高度较高的子树放到左子树位置,高度较矮的子树放到右子树位置。