二叉树处理函数C语言 二叉树算法c语言

二叉树建立中函数定义与运行(C语言)

大多数问题是函数名字写错 了。

创新互联专注于成都网站制作、网站设计、外贸网站建设、网页设计、网站制作、网站开发。公司秉持“客户至上,用心服务”的宗旨,从客户的利益和观点出发,让客户在网络营销中找到自己的驻足之地。尊重和关怀每一位客户,用严谨的态度对待客户,用专业的服务创造价值,成为客户值得信赖的朋友,为客户解除后顾之忧。

#includestdio.h

#includestdlib.h

#define OK 1

#define ERROR 0

#define OVERFLOW -1

typedef int Status;

typedef char TElemType;

typedef struct BiTNode{

TElemType data;

struct BiTNode *lchild,*rchild;

}BiTNode,*BiTree;

Status CreateBitree(BiTree T);

Status PreOrder(BiTree T);

Status InOrder(BiTree T);

Status CreateBitree(BiTree T)

{

char ch;

scanf("%c",ch);

if(ch=='#')

T=NULL;

else{

T=(BiTree)malloc(sizeof(BiTNode));

if(!T);

exit(OVERFLOW);

T-data=ch;

CreateBitree(T-lchild);

CreateBitree(T-rchild);

}

return OK;

}

Status PreOrder(BiTree T)

{

if(T){

printf("%c",T-data);

PreOrder(T-lchild);

PreOrder(T-rchild);

}

return OK;

}

Status InOrder(BiTree T)

{

if(T){

InOrder(T-lchild);

printf("%c",T-data);

InOrder(T-rchild);

}

return OK;

}

Status PostOder(BiTree T)

{

if(T){

PostOder(T-lchild);

PostOder(T-rchild);

printf("%c",T-data);

}

return OK;

}

int main()

{

BiTree T={'\0'};

printf("先序建树:依次输入二叉树结点号,孩子为空时输入空格\n");

CreateBitree(T);

printf("\n先序遍历二叉树为:");

PreOrder(T);

printf("\n中序遍历二叉树为:");

InOrder(T);

printf("\n后序遍历二叉树为:");

PostOder(T);

return 0;

}

二叉树的基本操作 C语言版的

#include iostream.h

typedef struct BiTNode

{

char data;

int bit;

struct BiTNode *lchild,*rchild,*parent;

}BiTNode;

void InitBT(BiTNode *t)//1、初始化,不带头结点

{

t=NULL;

}

/*void InitBT(BiTNode *t)//初始化,带头结点

{

t=new BiTNode;

t-lchild=t-rchild=t-parent=NULL;

}*/

int EmptyBT(BiTNode *t)//判断队空

{

if(t==0)

return 1;

else

return 0;

}

BiTNode *creatBT(BiTNode *t,int b)//2、创建二叉树

{

BiTNode *p;

char ch;

cinch;

if(ch=='#')return 0;

else

{

p=new BiTNode;

p-data=ch;

p-parent=t;

p-bit=b;

t=p;

t-lchild=creatBT(t,0);

t-rchild=creatBT(t,1);

}

return t;

}

void preorder(BiTNode *t)//3、先序遍历

{

if(!EmptyBT(t))

{

coutt-data;

preorder(t-lchild);

preorder(t-rchild);

}

}

void inorder(BiTNode *t)//中序遍历

{

if(!EmptyBT(t))

{

inorder(t-lchild);

coutt-data;

inorder(t-rchild);

}

}

void postorder(BiTNode *t)//后序遍历

{

if(!EmptyBT(t))

{

postorder(t-lchild);

postorder(t-rchild);

coutt-data;

}

}

void coutBT(BiTNode *t,int m,int n,int i)//4、计算二叉树中叶子结点、度为2的结点和度为1的结点的个数

{

if(!EmptyBT(t))

{

if((t-lchild==0) (t-rchild==0))

m++;//叶子结点

else if((t-lchild!=0) (t-rchild!=0))

i++;//度为2的结点

else

n++;//度为1的结点

coutBT(t-lchild,m,n,i);

coutBT(t-rchild,m,n,i);

}

}

void coutNode(BiTNode *t,int k)//5、求二叉树中结点个数

{

if(!EmptyBT(t))

{

k++;

coutNode(t-lchild,k);

coutNode(t-rchild,k);

}

}

int BTdepth(BiTNode *t)//6、求二叉树的深度

{

int i,j;

if(EmptyBT(t))

return 0;

else

{

i=BTdepth(t-lchild);

j=BTdepth(t-rchild);

return (ij?i:j)+1;

}

}

int Xdepth(BiTNode *t,char x)//7、查找x的层数

{

int num1,num2,n;

if(t==NULL)

return 0;

else{

if(t-data==x)

return 1;

num1=Xdepth(t-lchild,x);

num2=Xdepth(t-rchild,x);

n=num1+num2;

if(num1!=0||num2!=0)

n++;

return n;

}

}

static int flag;

void SearchChild(BiTNode *t,int k)//8、查找第k个结点的左右孩子

{

if(!EmptyBT(t))

{

if(k==0)

{

cout"位置不能为0!"endl;

return;

}

else

{

flag++;

if(flag==k)

{

if(t-lchild==0)

cout"无左孩子! ";

else

cout"左孩子为:"(t-lchild-data)" ";

if(t-rchild==0)

cout"无右孩子!"endl;

else

cout"右孩子为:"(t-rchild-data)endl;

}

else

{

SearchChild(t-lchild,k);

SearchChild(t-rchild,k);

}

}

}

}

int Xancestor(BiTNode *t,char x)//9、查找x结点祖先

{

int n,num1,num2;

if(t==NULL)

return 0;

else

{

if(t-data==x)

return 1;

num1=Xancestor(t-lchild,x);

num2=Xancestor(t-rchild,x);

n=num1+num2;

if(n!=0)

{

n++;

coutt-data" "endl;

}

}

}

void BTNodePath(BiTNode *t)//10、输出所有叶子结点路径

{

if(!EmptyBT(t))

{

if((t-lchild==0) (t-rchild==0))

{

coutt-data"的路径为:";

for(BiTNode *p=t;p!=0;p=p-parent)

coutp-data;

coutendl;

}

else

{

BTNodePath(t-lchild);

BTNodePath(t-rchild);

}

}

}

void BTNodebit(BiTNode *t)//11、输出所有叶子结点编码

{

if(!EmptyBT(t))

{

if((t-lchild==0) (t-rchild==0))

{

coutt-data"的编码为:";

for(BiTNode *p=t;p-parent!=0;p=p-parent)

coutp-bit;

coutendl;

}

else

{

BTNodebit(t-lchild);

BTNodebit(t-rchild);

}

}

}

void main()

{

BiTNode *t;

int m,n,i,d,q,k;

char x;

cout"1、初始化..."endl;

InitBT(t);

cout"2、创建二叉树..."endl;

t=creatBT(t,0);

cout"3.1、先序遍历..."endl;

preorder(t);

coutendl;

cout"3.2、中序遍历..."endl;

inorder(t);

coutendl;

cout"3.3、后序遍历..."endl;

postorder(t);

coutendl;

m=n=i=0;

cout"4、计算叶子结点,度为1的结点和度为2的结点的个数..."endl;

coutBT(t,m,n,i);

cout"叶子结点个数为:"mendl;

cout"度为1的结点个数为:"nendl;

cout"度为2的结点个数为:"iendl;

q=0;

cout"5、计算结点个数..."endl;

coutNode(t,q);

cout"结点个数为:"qendl;

d=0;

cout"6、计算深度..."endl;

d=BTdepth(t);

cout"深度为:"dendl;

cout"7、求x的层数..."endl;

cout"输入x:";

cinx;

if(Xdepth(t,x)==0)

cout"x不存在!"endl;

else

coutXdepth(t,x)endl;

cout"8、输入要查找孩子的结点在先序遍历中的位置k(不等于0):";

cink;

SearchChild(t,k);

if(kflag)

cout"位置超出长度!"endl;

cout"9、查询结点的所有祖先,请输入结点x:";

cinx;

int num;

num=Xancestor(t,x);

if(num==0)

cout"结点不存在!"endl;

if(num==1)

cout"根结点无祖先!"endl;

cout"10、输出所有叶子结点路径(叶→根):"endl;

BTNodePath(t);

cout"11、输出所有叶子结点编码(叶→根):"endl;

BTNodebit(t);

}

用C语言编程实现二叉树的基本操作,并完成下述函数功能: (1) CreateBiTree( ):根据先序遍历序列生成一棵

下面有一个建树的例子。

class TreeNode{

public:

TreeNode *left;

TreeNode *right;

int value;

TreeNode(int v): value(v)

{

left = NULL;

right = NULL;

}

~TreeNode() {

if (left != NULL) delete left;

if (right != NULL) delete right;

}

};

void addToTree(TreeNode *curr, TreeNode *p) {

if(p-value = curr-value) {

if(curr-left == NULL) {

curr-left = p;

return;

}

else addToTree(curr-left, p);

} else {

if(curr-right == NULL) {

curr-right = p;

return;

}

else addToTree(curr-right, p);

}

}

void printTree(TreeNode *p) {

if(p==NULL) return;

printTree(p-left);

printf("%d ", p-value);

printTree(p-right);

}

TreeNode * createBiTree(int[] a, int len)

{

TreeNode *root = new TreeNode(a[0]);

for(int i=1; i5; i++) {

TreeNode *p = new TreeNode(a[i]);

addToTree(root, p);

}

return root;

}

void main() {

int a[] = {3, 4, 1, 2, 5};

CreateBiTeee(a, 5);

printTree(root);

delete root;

}


本文标题:二叉树处理函数C语言 二叉树算法c语言
URL地址:http://azwzsj.com/article/dodpdsp.html