1.假设二叉树中的每个节点为单个字符,采用二叉链存储设计一个算法findparent,求二叉树b中指定值x的双亲节点。
void findparent(BTNode *b,ElemType x,BTNode *&p) {
if (b!=NULL) {
if (b->data==x)
p=NULL;
else if (b->lchild!=NULL && b->lchild->data==x)
p=b;
else if (b->rchild!=NULL && b->rchild->data==x)
p=b;
else {
findparent(b->lchild,x,p);
if (p==NULL)
findparent(b->rchild,x,p);
}
}
else p=NULL;
}
二叉树的主要算法实现都是利用递归,在本题中,首先遍历根节点,之后左节点,右节点,然后左子树,右子树,就可以找到双亲。
2.假设二叉树中的每个节点值为单个字符,采用二叉链的结构存储。设计一个算法,求二叉树b的最小支长。所谓最小最短支长指的是根节点到最近叶子节点的路径长度。
int MinBranch(BTNode *b) {
int min1 ,min2,min;
if (b==NULL) return 0;
else {
if(b->lchild==NULL && b->rchild==NULL)
return 0;
min1=MinBranch(b->lchild);
min2=MinBranch(b->rchild);
if(min1<min2) min=min1+1;
else
min=min2+1; returnmin;
}
}
''