#include<iostream>
#include<stdlib.h>
#include<bits/stdc++.h>
#include<queue>
#define ElemType int
using namespace std;
typedef struct BiTNode{
ElemType data;
struct BiTNode *lchild,*rchild;
}TNode,*Tree;
int treenum[]={1,2,4,0,0,5,0,0,3,0,0};
int k;
void createTree(Tree &T,int &k)
{
ElemType n;
// printf("输入为0停止!\n");
// scanf("%d",&n);
if(treenum[k]==0){
T=NULL;
k++;
}
else{
T=new TNode;
T->data=treenum[k];
k++;
// cout<<"T="<<T->data<<"k="<<k<<endl;
createTree(T->lchild,k);
createTree(T->rchild,k);
}
}
//先序遍历
int PreTree(Tree &T)
{
if(T==NULL){
return 0;
}
else{
cout<<T->data;
PreTree(T->lchild);
PreTree(T->rchild);
}
}
//删除根结点
void deletenode(Tree &T){
if(T!=NULL){
if(T->lchild->lchild==NULL&&T->lchild->rchild==NULL){
T->lchild=NULL;
}
if(T->rchild->lchild==NULL&&T->rchild->rchild==NULL){
T->rchild=NULL;
}
deletenode(T->lchild);
deletenode(T->rchild);
}
}
//计算指定结点*p所在的层次
int findnode(Tree T,TNode *p){
if(T==NULL)
return 0;
if(T==p)
return 1;
int depl=findnode(T->lchild,p);
int depr=findnode(T->rchild,p);
if(depl||depr){
if(depl>depr)
return 1+depl;
else
return 1+depr;
}
}
//计算二叉树中各结点中的最大元素的值
int maxnode(Tree T,int &maxdata){
if(T==NULL)
return 0;
if(T->data>=maxdata){
maxdata=T->data;
}
maxnode(T->lchild,maxdata);
maxnode(T->rchild,maxdata);
return maxdata;
}
//交换二叉树中每个结点的两个子女
void exc(Tree &T){
if(T->lchild!=NULL)
exc(T->lchild);
if(T->rchild!=NULL)
exc(T->rchild);
TNode *temp;
temp=T->lchild;
T->lchild=T->rchild;
T->rchild=temp;
}
//先序序列输出二叉树所有结点,及结点所在层次
void PreAndLevel(Tree T, int i)
{
if (T!= NULL)
{
cout<<"data = "<<T->data<<" i = "<<i<<endl;
PreAndLevel(T->lchild, i + 1);
PreAndLevel(T->rchild, i + 1);
}
}
int main()
{
Tree T;
k=0;
createTree(T,k);
// deletenode(T);
exc(T);
// PreTree(T);
int i=1;
PreAndLevel(T,i);
return 0;
}
有关二叉树的递归算法练习题6-10
最新推荐文章于 2024-07-14 01:31:01 发布