知识大全 二叉树的操作
Posted 结点
篇首语:知识贵在质,不在量。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 二叉树的操作相关的知识,希望对你有一定的参考价值。
二叉树的操作
#include <stdlib h>#include <stdio h>#define queuesize #define null typedef char datatype;typedef struct node datatype data; struct node *lchild *rchild; bintnode;//定义二叉链表结点结构typedef bintnode *bintree;//定义二叉链表指针类型
typedef struct int front rear; bintree data[queuesize];//循环队列元素类型为二叉链表结点指针 int count; cirqueue;//循环队列结构定义
main()//主函数 //建立二叉树的二叉链表表示 并进行先序遍历 中序遍历 后序遍历和按层次遍历 //求出所有叶子和结点总数 bintree t=null; int n; printf( please input nodes of bintree:\\n ); createbintree(&t);//建立二叉链表
printf( the preorder is: ); preorder(t);//对二叉树t进行先序遍历 printf( \\n );
printf( the inorder is: ); inorder(t);//对二叉树t进行中序遍历
printf( \\nthe postorder is: ); postorder(t);//对二叉树t进行后序遍历
printf( \\nthe leverorder is: ); leverorder(t);//对二叉树t进行按层次遍历
n=leave(t);// 求出二叉树的叶子数n
printf( \\nthe leave of bintree is: %d n);//打印二叉树的叶子总数 if (n)//当叶子数不为 printf( \\nthe list of leave is: ); leavelist(t);//输出所有的叶子 else printf( \\nno leave! );//输出无叶子(即空树)信息 printf( \\nthe nodes of bintree is: %d\\n nodes(t));//输出二叉树的总结点数
createbintree(bintree *t) //输入二叉树的先序遍历序列 创建二叉链表 char ch; if ((ch=getchar())== )//如果读入空格字符 创建空树 *t=null; else *t=(bintnode*)malloc(sizeof(bintnode));//申请根结点*t空间 (*t) >data=ch;//将结点数据ch放入根结点的数据域 createbintree(&(*t) >lchild);//建左子树 createbintree(&(*t) >rchild);//建右子树 //end of if //end of creatbintree
preorder(bintree t) //对二叉树进行先序遍历 if (t) printf( %c t >data); preorder(t >lchild); preorder(t >rchild); //end of if //end of preorder inorder(bintree t) //对二叉树进行中序遍历 if (t) inorder(t >lchild); printf( %c t >data); inorder(t >rchild); //end of if //end of inorder
postorder(bintree t) //对二叉树进行后序遍历 if (t) postorder(t >lchild); postorder(t >rchild); printf( %c t >data); //end of if //end of postorder
error(char *message) //出错时 调用的返回出错信息 终止程序运行的函数 fprintf(stderr error:%s\\n message); exit( );
leverorder(bintree t) cirqueue *q; bintree p; q=(cirqueue*)malloc(sizeof(cirqueue));//申请循环队列空间 q >rear=q >front=q >count= ;//将循环队列初始化为空 q >data[q >rear]=t;q >count++;q >rear=(q >rear+ )%queuesize;//将根结点入队 while (q >count)//若队列不为空 做以下操作 if (q >data[q >front])//当队首元素不为空指针 做以下操作 p=q >data[q >front];//取队首元素*p printf( %c p >data);//打印*p结点的数据域信息 q >front=(q >front+ )%queuesize;q >count ;//队首元素出队 if (q >count==queuesize)//若队列为队满 则打印队满信息 退出程序的执行 error( the queue full! ); else//若队列不满 将*p结点的左孩子指针入队 q >count++;q >data[q >rear]=p >lchild; q >rear=(q >rear+ )%queuesize; //enf of if if (q >count==queuesize)//若队列为队满 则打印队满信息 退出程序的执行 error( the queue full! ); else//若队列不满 将*p结点的右孩子指针入队 q >count++;q >data[q >rear]=p >rchild; q >rear=(q >rear+ )%queuesize; //end of if //end of if else//当队首元素为空指针 将空指针出队 q >front=(q >front+ )%queuesize;q >count ; //end of leverorder
int leave(bintree t) //求以t为树根的二叉树的叶子总数 if (!t)//若根结点为 return ;//返回叶子数 else//若根结点非空 if ((t >lchild==null)&&(t >rchild==null))//若根结点的左 右孩子都为空 return ;//返回叶子数 else //根结点的左 右孩子有 个不为空 return(leave(t >lchild)+leave(t >rchild)); //叶子数为左子树的叶子数加右子树中的叶子数
leavelist(bintree t) if (t) leavelist(t >lchild);//输出左子树中的所有叶子 if ((t >lchild==null)&&(t >rchild==null)) //若根结点为叶子 则输出叶子的数据域信息 printf( %c t >data); leavelist(t >rchild);//输出右子树中的所有叶子 //end of if //end of inorder
cha138/Article/program/sjjg/201311/23277相关参考
遍历概念 所谓遍历(Traversal)是指沿着某条搜索路线依次对树中每个结点均做一次且仅做一次访问访问结点所做的操作依赖于 具体的应用问题 遍历是二叉树上最重要的运算之一是二叉树上进行其它
希赛教育计算机专业考研专业课辅导招生 希赛教育计算机专业考研专业课辅导视频 希赛教育计算机考研专业课在线测试系统 对树和森林进行的各种操作均可通过对二叉树进行相应的操作来完成但同时也必须注意
二叉树是树形结构的一个重要类型许多实际问题抽象出来的数据结构往往是二叉树的形式即使是一般的树也能简单地转换为二 叉树而且二叉树的存储结构及其算法都较为简单因此二叉树显得特别重要 二叉树的定义
二叉树是树形结构的一个重要类型许多实际问题抽象出来的数据结构往往是二叉树的形式即使是一般的树也能简单地转换为二叉树而且二叉树的存储结构及其算法都较为简单因此二叉树显得特别重要二叉树的定义二叉树的递
第六章二叉树和树 本章介绍了树和森林的定义特别介绍了二叉树的定义`二叉树的性质`二叉树的存储结构及二叉树基本操作的实现对二叉树的周游算法作了详细描述森林与二叉树之间的转换为树提供了一种自然的存储结构
二叉树的特殊形态 满二叉树(FullBinaryTree)一棵深度为k且有k个结点的二叉树 特点二叉树的所有分支结点都存在左子树和右子树 特点二叉树的所有叶子结点都在同一层上 完全二叉树(Co
链式存储结构 结点的结构 二叉树的每个结点最多有两个孩子用链接方式存储二叉树时每个结点除了存储结点本身的数据外还应设置两个指针域 lchild和rchild分别指向该结点的左孩子和右孩子结点
顺序存储结构 该方法是把二叉树的所有结点按照一定的线性次序存储到一片连续的存储单元中结点在这个序列中的相互位置还能反映出结点 之间的逻辑关系 完全二叉树结点编号 ()编号办法 在一棵n个
二叉树具有以下重要性质 性质二叉树第i层上的结点数目最多为i(i≥) 证明用数学归纳法证明 归纳基础i=时有i==因为第层上只有一个根结点所以命题成立 归纳假设假设对所有的j(≤j 归纳
二叉树的定义 二叉树(BinaryTree)是n(n≥)个结点的有限集它或者是空集(n=)或者由一个根结点及两棵互不相交的分别称作这个根的左子树和右子树的二叉树组成 若二叉树为空集则称