数据结构——树例题1

1.设计算法返回二叉树T中先序遍历的最后一个结点,非递归方式

BTree prelast(BTree T){   
	BTree p=T;
	while(p->child!=NULL&&p->rchild!=NULL){   //当前结点有孩子就循环(先序遍历的最后一个结点一定为叶子结点) ,非叶子结点肯定不是最后一个结点 
		if(p->rchild){       //如果有右孩子,右孩子肯定在先序序列中当前节点之后(如果再有左孩子,右孩子也在整个左子树之后)
			p=p->rchild;
		}
		else            //如果无右孩子,则肯定有左孩子,左孩子肯定在先序序列中当前节点之后,向左孩子移动 
			p=p->lchild;
	}
	return p;
}

2.设计算法按照先序遍历方式输出二叉树T的每个结点和其层次数

int count=1;    //全局变量 
BTree preorder(BTree T,int count){
	BTree p=T;
	if(T!=NULL){            //T不为空,继续执行,T为空,结束此次递归 
		print("%c,%d",p->data,count);    //输出当前结点和当前层次数 
		preorder(p->lchild,count+1);      //输出其左子树每个结点及其层次数 
		preorder(p->rchild,count+1);      //输出其右子树每个结点及其层次数 
	}
} 

3.一颗完全二叉树以顺序方式存储在A[1..n]中,设计算法转换为二叉链表形式

BTree build(int A[],int i,int n){
	BTree r;
	if(i>n)	return NULL;     //位置超出存储区域,算法结束 
	else
	{
		r=(BTree)malloc(sizeof(BNode));      //为新结点分配存储空间 
		r->data=A[i];                       //获得i位置的数据 
		r->lchild=build(A,2*i,n);         //建立当前结点的左子树 
		r->rchild=build(A,2*i+1,n);           //建立当前结点的右子树 
		return r;
	}
}

4.设计算法将一颗二叉链表形式的二叉树按顺序方式存储到数组A[]中 

void trans(BTree T,int i){
	if(T!=NULL){
		A[i]=T->data;      //存储当前结点 
		trans(T->lchild,2*i);        //存储当前结点的左子树 
		trans(T->rchild,2*i+1);       //存储当前结点的右子树 
	}
}

5.设计算法交换二叉树中每个结点的左右孩子

void swap(BTree &T){
	BTree temp;
	if(T!=NULL){
		temp=T->lchild;    //交换左右孩子 
		T->lchild=T->rchild;
		T->lchild=temp;
		
		swap(T->lchild);     //递归对左子树右子树进行同样操作 
		swap(T->rchild);
	} 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值