二叉树某些问题的递归算法

合并二叉树

//二叉树结构体定义
typedef struct BiTNode{
	ElemType data;
	struct BiTNode* lchild;
	struct BiTNode* rchild;
}BiTNode,*BiTree;

//合并二叉树
BiTree mergeTree(BiTree T1,BiTree T2){
	if(!T1)
		return T2;
	if(!T2)
		return T1;
	BiTree T=(BiTree)malloc(sizeof(BiTNode));
	T->data=T1->data+T2->data;
	T->lchild=mergeTree(T1->lchild,T2->lchild);
	T->rchild=mergeTree(T1->rchild,T2->rchild);
	return T;
}

对称二叉树

//对称二叉树
bool isSymmetric(BiTree T){
	if(T)
		return isMirror(T->lchild,T->rchild);
	else
		return true;
}
bool isMirror(BiTree T1,BiTree T2){
	if(!T1&&!T2)
		return true;
	else if(!T1||!T2)
		return false;
	else
		return (T1->data==T2->data)
				&&isMirror(T1->lchild,T2->rchild)
				&&isMirror(T1->rchild,T2->lchild);
}

删除所有叶子结点

BiTree DeleteLeaf(BiTree T){
	if(!T||(!T->lchild&&!T->rchild))
		return NULL;
	else{
		T->lchild=DeleteLeaf(T->lchild);
		T->rchild=DeleteLeaf(T->rchild);
	}
	return T;
}

猜你喜欢

转载自blog.csdn.net/qq_39197960/article/details/85018474