C语言演示二叉树算法

作者&投稿:兆魏 (若有异议请与网页底部的电邮联系)
~

二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。二叉树的第i层至多有2i − 1个结点;深度为k的二叉树至多有2k − 1个结点;对任何一棵二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则n0 = n2 + 1。二叉树算法常被用于实现二叉查找树和二叉堆。

首先打开VC++6.0

选择文件,新建

选择C++ source file 新建一个空白文档

首先声明头文件

定义树的结点结构 typedef struct TreeNode{ char data;/*树中结点的数据是一个字符*/ struct TreeNode *lchild; struct TreeNode *rchild; }TREENODE;

声明变量 int NodeNum = 0;/*统计数的结点数*/ int LeafNum = 0;/*统计数的叶子结点数*/ char ch[] = {'a', 'b', 'c', ' ', ' ', 'd', ' ', ' ', 'e', 'f', ' ', ' ', 'g', ' ', ' '}; int inc = 0;

用函数建立一个二叉树 int CreateBiTree(TREENODE **T) /*按先序次序输入二叉树中结点的值,以空字符表示空树*/ { char i; if(ch[inc++]==' ') *T = NULL; else { printf("%c
",ch[inc-1]); if(!(*T = (TREENODE *)malloc(sizeof(TREENODE)))) return -1; (*T)-data = ch[inc-1]; printf("%c
",(*T)-data); CreateBiTree(((*T)-lchild)); CreateBiTree(((*T)-rchild)); } return 1; }

先序遍历二叉树 int PreOderTraverse(TREENODE *T) { if(T) { printf("%c ",T-data); PreOderTraverse(T-lchild); PreOderTraverse(T-rchild); } return 1; }

中序遍历二叉树 int InOderTraverse(TREENODE *T) { if(T) { InOderTraverse(T-lchild); printf("%c ",T-data); InOderTraverse(T-rchild); } return 1; }

后序遍历二叉树 int BackOderTraverse(TREENODE *T) { if(T) { BackOderTraverse(T-lchild); BackOderTraverse(T-rchild); printf("%c ",T-data); } return 1; }

利用先序遍历来计算树中的结点数 void CountNodeNum(TREENODE *T) { if(T) { NodeNum ++; CountNodeNum(T-lchild); CountNodeNum(T-rchild); } }

利用先序遍历计算叶子节点数 void CountLeafNum(TREENODE *T) { if(T) { if((!(T-lchild))(!(T-rchild))) LeafNum ++; CountLeafNum(T-lchild); CountLeafNum(T-rchild); } }

主函数 int main() { TREENODE *T; int i; CreateBiTree(T); do { puts("**************************************************"); puts("*          you can choose:       *"); puts("* 1: Traverse the Binary tree by pre order   *"); puts("* 2: Traverse the Binary tree by mid order   *"); puts("* 3: Traverse the Binary tree by back order  *"); puts("* 4: Count the node num of the Binary tree   *"); puts("* 5: Count the leaf node num of the Binary tree*"); puts("**************************************************"); puts("please input your choice:"); scanf("%d",i); switch(i) { case 1: printf("The preoder is:
"); PreOderTraverse(T); printf("
"); break; case 2: printf("The midoder is:
"); InOderTraverse(T); printf("
"); break; case 3: printf("The backoder is:
"); BackOderTraverse(T); printf("
"); break; case 4: CountNodeNum(T); printf("The nodenum of the tree is:%d
",NodeNum); break; case 5: CountLeafNum(T); printf("The leafnum of the tree is:%d
",LeafNum); break; } printf("please input any char to go on
"); getch(); }while((i=1)(i6)); getch(); return 1; }

运行结果




试用文字表达按照层次遍历二叉树的思想。
遍历算法 1.中序遍历的递归算法定义:若二叉树非空,则依次执行如下操作:(1)遍历左子树;(2)访问根结点;(3)遍历右子树。2.先序遍历的递归算法定义:若二叉树非空,则依次执行如下操作:(1) 访问根结点;(2) 遍历左子树;(3) 遍历右子树。3.后序遍历得递归算法定义:若二叉树非空,则依次...

请编写一个判别给定二叉树是否为二叉排序树的算法
1、首先打开VC++6.0。2、选择文件,新建。3、选择C++ source file 新建一个空白文档。4、首先声明头文件。5、定义树的结点结构typedef struct TreeNode{ char data;\/*树中结点的数据是一个字符*\/ struct TreeNode *lchild; struct TreeNode *rchild;}TREENODE;。6、声明变量,int NodeNum = 0;...

二叉树的层次遍历算法
二叉树的层次遍历算法有如下三种方法:给定一棵二叉树,要求进行分层遍历,每层的节点值单独打印一行,下图给出事例结构:对此二叉树遍历的结果应该是:1,2 , 3 4, 5, 6 7, 8 第一种方法,就是利用递归的方法,按层进行打印,我们把根节点当做第0层,之后层次依次增加,如果我们想打印第二层...

请用C语言编写一个函数,实现求二叉树高度的算法,并给出结点结构_百度知 ...
typedef int Status;typedef char TElemType;typedef struct BiTNode{ TElemType data;struct BiTNode *lchild,*rchild;}BiTNode,*BiTree;int GetDepth(BiTree T){ if(!T) return 0;else{ int depthLeft = GetDepth( T->lchild );int depthRight= GetDepth( T->rchild );return (depthLeft>depth...

二叉树先序非递归遍历C语言算法
include "stdio.h"include "stdlib.h"define STACK_INIT_SIZE 10 \/\/栈的初始长度 define STACKINCREMENT 5 \/\/栈的追加长度 typedef struct bitree{ char data;struct bitree *lchild,*rchild;}bitree; \/\/二叉树结点定义 typedef struct { bitree **base;bitree **top;int stacks...

用C实现二叉树的建立,先序、中序、后序历遍,深度算法。紧急!!
include <stdio.h>\/\/头文件 include <stdlib.h> include <malloc.h> typedef struct BiTNode { char data;struct BiTNode *lchild,*rchild;} BiTNode,*BiTree;\/\/定义结点类型 BiTree CreateBiTree()\/\/创建树 { char p;BiTree T;scanf("%c",&p);if(p==' ')T=NULL;else { T=(BiTNode...

树- 哈夫曼树及其应用 - 最优二叉树(二)
) 将这两个孩子的权值之和作为新树根的权值 ( )对新的森林F重复( ) 直到森林F中只剩下一棵树为止 这棵树便是哈夫曼树 用哈夫曼算法构造哈夫曼树的过程见【 动画演示 】注意 ① 初始森林中的n棵二叉树 每棵树有一个孤立的结点 它们既是根 又是叶子 ② n个叶子的哈夫曼树要经过n 次合并 ...

C语言数据结构二叉树的遍历
层次遍历应该没有递归算法递归实际就是一种深度优先的算法而层次遍历实际是广度优先的遍历算法,所以递归不适用比如假设有递归算法,现遍历i层的开始,对i层第一个元素遍历后需调用递归函数遍历其孩子,递归调用完成后才继续遍历i层第二个元素,这样就不是层次遍历了。

以二叉链表作存储结构,编写二叉树深度的递归算法(c++语言)
给你一个完整的例子吧。学习一下#include <stdio.h> include <malloc.h> include <stdlib.h> define OK 1 define ERROR 0 define OVERFLOW -2 define MAX(a,b) (a>b?a:b)typedef char TElemType;typedef int Status;\/\/二叉树的二叉链表存储结构 typedef struct BiTNode{ TElemType data;struct...

求C语言版数据结构二叉树的先序遍历递归算法,不要伪码,要求能实现能运...
K&R中的一个实现,可以读取数字,插入二叉树,并且统计出现次数。最后输出,这里假设只读取正数,自己可以改getword函数 include<stdio.h>#include<stdlib.h>#include<string.h>#include<ctype.h> #define MAXLINE 100 struct num { int number; int count; struct num *left; struct ...

舟曲县19371655172: 用C语言实现二叉树的操作 -
汉俩洛那: 你可以设定几个变量如a=0然后当有求二叉树的高度、所有结点的数目、叶子结点的数目.就将你设好的量++如a++就行了..然后输出a

舟曲县19371655172: 用c语言编程实现二叉树的建立和遍历二叉树? -
汉俩洛那: //这是我上数据结构写的 建议理解为主#include#include#define ERROR 0#define OK 1#define OVERFLOW -2#define FLASE 0#define TURE 1 typedef int Status; typedef char TElemType; typedef struct BiTNode{ TElemType data; struct BiTNode ...

舟曲县19371655172: (C语言)构造一棵二叉树并显现出来 -
汉俩洛那: #include "stdio.h" #include "conio.h" typedef struct node1 { char data; struct node1 *lchild,*rchild; }btchinalr; btchinalr *createbt() { btchinalr *q; struct node1 *s[30]; int i,j; char x; printf("i,x=");scanf("%d,%c",&i,&x); while(i!=0&&x!='$') { q=(...

舟曲县19371655172: 求二叉树遍历算法C语言实现的?
汉俩洛那: 下面是c语言的前序遍历二叉树的算法,在这里假设的节点元素值假设的为字符型, 说明:算法中用到了结构体,也用到了递归的方法,你看看怎么样,祝你好运! #include"stdio.h" typedef char ElemType; typedef struct node //定义链表结构 ...

舟曲县19371655172: c语言二叉树代码求解 -
汉俩洛那: #include <stdio.h>#include <stdlib.h>#include <malloc.h>#define MAX 20#define OK 1#define ERROR 0#define NULL 0#define OVERFLOW 0 typedef char TElemType; typedef int Status; typedef struct BiTNode{ TElemType data; struct BiTNode *...

舟曲县19371655172: 如何用c语言写一个二叉树的代码 -
汉俩洛那: 用结构体存储二叉树节点 一个数值成员, 存值 两个指针, 分别指向左右子树 然后 做二叉树相关的函数就好. struct node{int value;struct node *left, *right; };

舟曲县19371655172: 有关二叉树的简单C语言程序.
汉俩洛那: 先序输入 如 abc##d##e## (#表示空) 输出 cbdae #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define OVERFLOW -2 #include "cstdlib" #include "malloc.h" typedef int Status; typedef char TElemType; #include <...

舟曲县19371655172: 数据结构代码(用C语言) 二叉树的操作 -
汉俩洛那: # include struct BTNode { int data; struct BTNode * pLchild;//p是指针,L是左,child是孩子 struct BTNode * pRchild; };//函数声明 struct BTNode * CreateBTree(void);//创建树 void PreTraverseBTree(struct BTNode * pT);//先序遍历 void ...

舟曲县19371655172: 二叉树遍历(c语言实现) -
汉俩洛那: #include <stdio.h>#include <malloc.h> typedef struct node{ int data; struct node *lchild,*rchild; }*treetp,tree; treetp create (treetp t,int c); void print1(treetp); void print2(treetp); void print3(treetp); int number=0; void main() { treetp t=0,r;r=create (t,0);...

舟曲县19371655172: c语言二叉树例程
汉俩洛那:// 二叉树2.cpp // #include "iostream" #include "stdlib.h" using namespace std; struct tree //建立树的单元 { int data; struct tree *lc; struct tree *rc; }; struct tree * h; struct tree *create(struct tree *B,int k) //创建二叉树 { struct tree *p; int c; cout<<"...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网