完全二叉树的判断与交换左右子树

完全二叉树判断

根据二叉树的定义,具有n个结点的完全二叉树与满二叉树中编号为1~n的结点一一对应。

算法思想:

        采用层次遍历的算法,将所有结点加入队列,(包括空结点) 

        当遇到空结点时,检查后面是否有非空结点。若有,则不是完全二叉树.

bool IsComplete(node *root){	
	if(!root) return true;
	queue<node *> q;
	node *now;
	q.push(root);
 	while(!q.empty()){
 		now =q.front();
 		q.pop();
 		if(now){
 			q.push(now->lchild);
 			q.push(now->rchild);
		 }
		 else{
		 	while(!q.empty()){
		 		now=q.front();
		 		q.pop();
		 		if(now) return false;
			 }
		 }
	 }
	 return true;
}

交换左右子树:

采用递归算法实现交换左、右子树,

1)首先交换b结点左孩子的左、右子树,

2)然后交换b结点右孩子的左、右子树,

3)最后交换b结点的左右子树,当节点为空时递归结束(后序遍历思想)。

算法实现如下:
 

void swap(BiTree b){
	if(b){
		swap(b->lchild);
		swap(b->rchild);
		temp=b->lchild;
		b->lchild=b->rchild;
		b->rchild=temp; 
	}
} 

猜你喜欢

转载自blog.csdn.net/qq_41317652/article/details/84112087