精华内容
下载资源
问答
  • 二叉树的建立
    千次阅读
    2021-05-23 12:50:08

    二叉树的建立实验报告(共10篇)

    实验三:二叉树的建立及遍历  【实验目的】  掌握利用先序序列建立二叉树的二叉链表的过程。  掌握二叉树的先序、中序和后序遍历算法。  【实验内容】  1.编写程序,实现二叉树的建立,并实现先序、中序和后序遍历。  如:输入先序序列abc###de###,则建立如下图所示的二叉树。  并显示其先序序列为:abcde  中序序列为:cbaed  后序序列为:cbeda  【实验步骤】  1.打开VC++。  2.建立工程:点File->New,选Project标签,在列表中选Win32ConsoleApplication,再在右边的框里为工程起好名字,选好路径,点OK->finish。至此工程建立完毕。  3.创建源文件或头文件:点File->New,选File标签,在列表里选C++SourceFile。给文件起好名字,选好路径,点OK。至此一个源文件就被添加到了你刚创建的工程之中。  4.写好代码  5.编译->链接->调试  #include  #include  #defineOK1  #defineOVERFLOW-2  typedefintStatus;  typedefcharTElemType;  typedefstructBiTNode  {  TElemTypedata;  structBiTNode*lchild,*rchild;  }BiTNode,*BiTree;  StatusCreateBiTree(BiTree&T)  {  TElemTypech;  scanf("%c",&ch);  if(ch=='#')  T=NULL;  else  {  if(!(T=(BiTNode*)malloc(sizeof(BiTNode))))  returnOVERFLOW;  T->data=ch;  CreateBiTree(T->lchild);  CreateBiTree(T->rchild);  }  returnOK;  }//CreateBiTree  voidPreOrder(BiTreeT)  {  if(T)  {  printf("%c",T->data);  PreOrder(T->lchild);  PreOrder(T->rchild);  }  }  voidInOrder(BiTreeT)  {  if(T)  {  InOrder(T->lchild);  printf("%c",T->data);  InOrder(T->rchild);  }  }  voidPostOrder(BiTreeT)  {  if(T)  {  PostOrder(T->lchild);  PostOrder(T->rchild);  printf("%c",T->data);  }  }  voidmain()  {  BiTreeT;  CreateBiTree(T);  printf("\n先序遍历序列:");  PreOrder(T);  printf("\n中序遍历序列:");  InOrder(T);  printf("\n后序遍历序列:");  PostOrder(T);  }  【实验心得】  这次实验主要是通过先序序列建立二叉树,和二叉树的先序、中序、后续遍历  算法。通过这次实验,我巩固了二叉树这部分知识,从中体会理论知识的重要性。在做实验之前,要充分的理解本次实验的理论依据,这样才能达到事半功倍的效果。如果在没有真正理解实验原理之盲目的开始实验,只会浪费时间和精力。  例如进行二叉树的遍历的时候,要先理解各种遍历的特点。先序遍历是先遍历根节点,再依次先序遍历左右子树。中序遍历是先中序遍历左子树,再访问根节点,最后中序遍历右子树。而后序遍历则是先依次后续遍历左右子树,再访问根节点。  掌握了这些,在实验中我们就可以融会贯通,举一反三。  所以,这次实验让我懂得了理论知识的重要性,只有领悟了最基本的知识,在实验过程中我们才能够独立的思考,大胆的推断,不断的创新,进而提高动手能力。  二叉树的遍历实验报告  一、需求分析  在二叉树的应用中,常常要求在树中查找具有某种特征的结点,或者对树中全部结点逐一进行某种处理,这就是二叉树的遍历问题。  对二叉树的数据结构进行定义,建立一棵二叉树,然后进行各种实验操作。  二叉树是一个非线性结构,遍历时要先明确遍历的规则,先访问根结点还时先访问子树,然后先访问左子树还是先访问有右子树,这些要事先定好,因为采用不同的遍历规

    更多相关内容
  • 二叉树建立

    万次阅读 多人点赞 2019-03-20 20:57:36
    结束二叉树输入:如何结束创建二叉树的输入那;把二叉树补全 前序(输入):AB##C## 中序:#B#A#C# 后序:##B##CA 输出结果如下: 代码如下 #include<iostream> using namespace std; //定义节点 ...

    结束二叉树输入:如何结束创建二叉树的输入那;把二叉树补全

    前序(输入):AB##C##

    中序:#B#A#C#

    后序:##B##CA

    输出结果如下:

    代码如下

    #include<iostream>
    using namespace std;
    
    //定义节点
    typedef struct node
    {
    	struct node *left;
    	struct node *right;
    	char data;
    }BiTreeNode, *BiTree; 
    
    
    //按照前序顺序建立二叉树
    void createBiTree(BiTree &T) 
    {//输入需要将二叉树补成满二叉树  ABD##E##CH###  或者 AB##C##
    	char c;
    	cin >> c;
    	if ('#' == c)             //当遇到#时,令树的根节点为NULL,从而结束该分支的递归
    		T = NULL;
    	else
    	{
    		T = new BiTreeNode;
    		T->data = c;
    		createBiTree(T->left);
    		createBiTree(T->right);
    	}
    }
    
    //前序遍历输出
    void preTraverse(BiTree T)
    {
    	if (T)
    	{
    		cout << T->data << " ";
    		preTraverse(T->left);
    		preTraverse(T->right);
    	}
    }
    //中序遍历输出
    void midTraverse(BiTree T)
    {
    	if (T)
    	{
    		midTraverse(T->left);
    		cout << T->data << " ";
    		midTraverse(T->right);
    	}
    }
    //后续遍历输出
    void postTraverse(BiTree T)
    {
    	if (T)
    	{
    		postTraverse(T->left);
    		postTraverse(T->right);
    		cout << T->data << " ";
    	}
    }
    int main()
    {
    	BiTree T;               //声明一个指向二叉树根节点的指针               
    	createBiTree(T);
    	cout << "二叉树创建完成!" << endl;
    	cout << "前序遍历:" << endl;
    	preTraverse(T);
    	cout << endl;
    	cout << "中序遍历:" << endl;
    	midTraverse(T);
    	cout << endl;
    	cout << "后序遍历:" << endl;
    	postTraverse(T);
    	return 0;
    }

     

    展开全文
  • 1.采用二叉链表作为存储结构,创建一棵二叉树; 2.用递归及非递归算法对二叉树实现先序遍历; 3.用递归及非递归算法对二叉树实现中序遍历; 4.用递归及非递归算法对二叉树实现后序遍历。 5.用递归遍历算法中的访问...
  • 数据结构试验3二叉树建立,遍历等操作代码及运行结果。 实验内容: 采用二叉链表存储,实现二叉树的创建、遍历(递归)、赫夫曼编码和译码等典型操作。 1. 编程实现如下功能: (1)假设二叉树的结点值是字符型,...
  • 二叉树建立遍历

    2018-01-03 09:30:41
    二叉树建立遍历,输入后可以输出二叉树的中序和后序遍历。
  • 主要介绍了C语言排序方法,包含10种排序,数据结构课程设计实例二叉树建立遍历冒泡排序快速排序_二叉排序树_二叉树层次遍历_二叉树非递归遍历_二叉树建立括号匹配直接插入选择代码大学生本科毕业设计期末作业排序...
  • 建立二叉树,实现二叉树的先序、中序、后序的递归遍历算法,输出遍历结果。 实现二叉树的先序、中序、后序和层次遍历的非递归算法,输出遍历结果。
  • 二叉树建立及其遍历

    2018-11-26 23:36:03
    C实现二叉树建立及先中后序的遍历,控制台程序,在各版本vs上均可运行
  • 基于二叉排序树的二叉树建立
  • c++二叉树代码
  • 数据结构中二叉树建立以及递归、非递归遍历实现C代码
  • 二叉树建立(C++)

    千次阅读 多人点赞 2020-09-08 14:47:14
    二叉树建立、递归遍历、层次遍历 #include<iostream> #include<queue> using namespace std; class tree { public: char value;//结点值 tree *liftchild;//左子树指针 tree *rightChild;//右子树...

    二叉树的建立、递归遍历、层次遍历

    #include<iostream>
    #include<queue>
    using namespace std;
    class tree {
    public:
    	char value;//结点值
    	tree *liftchild;//左子树指针
    	tree *rightChild;//右子树指针
    };
    void creat_tree(tree * &T)//创建二叉树
    {
    	char ch;
    	ch = getchar();//从键盘输入一串字母,依次读取,直至换行键
    	if (ch == '#')
    		T = NULL;
    	else {
    		T = new tree;
    		T->value = ch;
    		creat_tree(T->liftchild);
    		creat_tree(T->rightChild);
    	}
    }
    void VLR(tree *T)//先序遍历二叉树
    {
    	if (T == NULL)
    		return;
    	else {
    			cout << T->value;
    			VLR(T->liftchild);
    			VLR(T->rightChild);
    	}
    }
    void LVR(tree *T)//中序遍历二叉树
    {
    	if (T == NULL)
    		return;
    	else {
    		LVR(T->liftchild);
    		cout << T->value;
    		LVR(T->rightChild);
    	}
    }
    void LRV(tree *T)
    {
    	if (T == NULL)
    		return;
    	else {
    		LRV(T->liftchild);
    		
    		LRV(T->rightChild);
    		cout << T->value;
    	}
    
    }
    int caclnum(tree* T)//计算结点个数
    {
    	if (T == NULL)
    		return 0;
    	else
    	{
    		return 1 + caclnum(T->liftchild) + caclnum(T->rightChild);//计算二叉树结点个数
    	}
    
    }
    void LevelOrder(tree * T)//层次遍历
    {
    	if (T == NULL)
    		return;
    	queue<tree *> deq;//建立一个队列容器
    	
    	deq.push(T);
    	while (!deq.empty())
    	{
    		tree *tr = deq.front();
    		cout << tr->value << endl;
    		deq.pop();
    		if (tr->liftchild != NULL)
    			deq.push(tr->liftchild);
    
    		if (tr->rightChild!= NULL)
    			deq.push(tr->rightChild);
    	}
    }
    int main() {
    
    	tree * T ;
    	creat_tree(T);
    	VLR(T);//前序遍历
    	cout << endl;
    	LVR(T);//中序遍历
    	cout << endl;
    	LRV(T);//后序遍历
    	cout << caclnum(T);//统计结点个数
    	LevelOrder(T);//层次遍历
    	system("pause");
    	
    	return 0;
    }
    
    展开全文
  • 【1】前序和中序构造二叉树;【2】中序和后序构造二叉树;【3】镜像打印二叉树
  • 针对目前建立二叉树存在算法复杂、执行速度慢的问题,提出一种新的二叉树生成算法。主要采用二叉排序树的思想,并结合二叉树遍历的特点,通过先对中序遍历依次编号,然后按先序遍历或后序遍历的元素及编号建立二叉排序树...
  • 1.创建二叉树的链式存储表示。由二叉树的先序序列和中序序列创建二叉树; 2.按树状打印二叉树; 3.统计二叉树的叶子结点个数; 4.输出二叉树中从根结点到所有叶子结点的路径
  • 10个数据结构课程设计实例二叉树建立遍历冒泡排序快速排序等.rar
  • 10个数据结构课程设计例子 查找.c 二叉排序树.c 二叉树层次遍历.c 二叉树非递归遍历.c 二叉树建立.c 快速排序.c 括号匹配.c 冒泡排序.c 直接插入排序.c 直接选择排序.c
  • 10个数据结构课程设计实例二叉树建立遍历冒泡排序快速排序等.zip
  • 10个数据结构课程设计实例二叉树建立遍历冒泡排序快速排序等下载.zip
  • (1)输入字符序列,建立二叉链表。 (2)先序、中序、后序遍历二叉树:递归算法。 (3)中序遍历二叉树:非递归算法(最好也能实现先序,后序非递归算法)。 (4)求二叉树的高度 。 (5)求二叉树的叶子个数。 ...
  • 数据结构中树结构中二叉树建立
  • 二叉树建立及遍历

    千次阅读 2018-05-25 22:22:16
    本来想做纯二叉树的遍历的,但是做的时候感觉加上哈夫曼编码的建立规则吧,于是这个四不像便产生啦。。。不过基本的三种遍历方法还在。求节点数,树的深度,二叉树每层节点数也有的。#include&lt;stdio.h&gt...

    本来想做纯二叉树的遍历的,但是做的时候感觉加上哈夫曼编码的建立规则吧,于是这个四不像便产生啦。。。
    不过基本的三种遍历方法还在。求节点数,树的深度,二叉树每层节点数也有的。

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    
    int Count = 0;                   /*统计二叉树节点*/
    int Depth = 0;                   /*二叉树的深度*/
    
    /*二叉树结构*/
    typedef struct BNode
    {
    	char data;                   /*字符*/
    	int weight;                  /*出现次数,即权重*/
    	struct BNode *left,*right;   /*左子女,右子女*/
    }BTNode,*BTree;
    
    /*字符和出现频率的映射表*/
    typedef struct 
    {
    	char data;                   /*字符*/
    	int weight;                  /*出现次数,即权重*/
    	int level;                   /*该字符所在二叉树层次*/
    }chart;
    
    /*创建字符和频率映射表*/
    chart * CreateChart()
    {
    	int i;
    	chart *List = (chart *)malloc(sizeof(chart) * Count);  /*动态分配有NUM个chart*类型单元的数组*/
    	
    	/*循环方式建立List表*/
    	for (i = 0 ; i < Count ; i++)
    	{
    		printf("Please enter the character of NO%d.:\n",i+1);    /*输入字符*/
    		fflush(stdin);
    		scanf("%c",&List[i].data);                  
    		fflush(stdin);
    		printf("Please enter the weight of NO%d.:\n",i+1);       /*输入权重*/
    		scanf("%d",&List[i].weight);
    		List[i].level = 0;
    	}
    	return List;
    }
    
    /*插入一个数据,数据左小右大*/
    int Insert(BTree root,char Data,int weight)
    {
    	int level = 1;                      /*level代表该节点插入的层次*/
    	BTree temp,father,child;            /*temp是临时结点,father是对比结点的父结点,child是当前对比结点。*/
    
        /*创建临时结点*/
    	temp = (BTree)malloc(sizeof(BTNode));
    	temp->data = Data;
    	temp->weight = weight;
    	temp->left = NULL;
    	temp->right = NULL;
    	child = root;
    
    	/*该临时结点的挂链*/
        while (child)
    	{
    		father = child;
    		if (child->weight > temp->weight)         /*权重小的放在左边*/
    			child = child->left;
    		else                                      /*权重大的放在右边*/
    			child = child->right;
    		level++;
    	}
    	if (father->weight > temp->weight)
    		father->left = temp;
    	else
    		father->right = temp;
    	return level;
    }
    
    
    /*创建二叉树*/
    BTree CreateBTree(chart *List)
    {
    	int i;
    	BTree root;
    	
    	/*创建根节点*/
    	root = (BTree)malloc(sizeof(BTNode));
    	root->data = List[0].data;
    	root->weight = List[0].weight;
    	root->left = NULL;
    	root->right = NULL;
    	List[0].level=1;
    	Depth = 1;
    
    	/*创建其余节点*/
    	for (i=1;i<Count;i++)
    	{
    		List[i].level = Insert(root,List[i].data,List[i].weight);
    		if (Depth < List[i].level)
    			Depth = List[i].level;
    	}
    	return root;
    } 
    
    /*先序遍历*/
    void PreOrderTraverse(BTree root)
    {
    	if (root)
    	{
    		printf("\t%c",root->data);
    		PreOrderTraverse(root->left);
    		PreOrderTraverse(root->right);
    	}
    }
    
    
    /*中序遍历*/
    void InOrderTraverse(BTree root)
    {
    	if(root)
    	{
    		InOrderTraverse(root->left);
    		printf("\t%c",root->data);
    		InOrderTraverse(root->right);
    	}
    }
    
    
    /*后序遍历*/
    void PostOrderTraverse(BTree root)
    {
    	if(root)
    	{
    		PostOrderTraverse(root->left);
    		PostOrderTraverse(root->right);
    		printf("\t%c",root->data);
    	}
    }
    
    
    /*统计输出二叉树每层节点数*/
    void NodeNum(chart *List)
    {
    	int i,L;                                                  /*L是每个字符所在二叉树的层数*/
    	int *llevel;                                              /*llevel指向存储每层结点的数组*/
    	llevel= (int *)malloc(sizeof(int) * (Depth+1) )  ;        /*建立一个拥有Depth+1个单元的数组,用来存储每层节点数。*/
    	memset(llevel, 0, sizeof(int) * (Depth+1));
    	
    	/*统计每层节点数*/
    	for (i = 0; i < Count; i++)                              
    	{
    		L=List[i].level;
    		llevel[L]++;
    	}
    
    	/*输出每层节点数*/
    	for(i = 1; i < Depth+1; i++)                             
    	{
    		printf("Level %d has %d nodes.\n", i, llevel[i] );
    	}
    }
    
    /*主程序*/
    int main(void)
    {
    	chart *List;    /*List是字符和频率的映射表*/
    	BTree root;     /*root是二叉树的根节点*/
    
    	printf("Please enter the number of characters:\n");/*设置字符总数*/
    	scanf("%d",&Count);
    	List = CreateChart();
    	root = CreateBTree(List);/*创建二叉树*/
    	system("cls");
    
    	/*先序输出*/
    	printf("\n先序输出\n");
    	PreOrderTraverse(root);
    	
    	/*中序输出*/
    	printf("\n中序输出\n");
    	InOrderTraverse(root);
    	
    	/*后序输出*/
    	printf("\n后序输出\n");
    	PostOrderTraverse(root);
    	
    	/*输出二叉树节点总数*/
    	printf("\nThe number of nodes of binary tree is: %d.\n",Count);
    
    	/*统计并输出该二叉树的深度*/
    	printf("\nThe number of level of binary tree is: %d\n",Depth);
    
    	/*输出每层有几个节点*/
    	NodeNum(List);
    
    	return 0;
    }
    
    


    展开全文
  • 平衡二叉树建立

    千次阅读 2018-03-03 19:33:56
    数据结构实验之查找二:平衡二叉树Time Limit: 400 ms Memory Limit: 65536 KiB#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; struct node { int ...
  • 10个数据结构课程设计例子: 1、查找.c 2、二叉排序树.c 3、二叉树层次排序.c ...5、二叉树建立.c 6、快速排序.c 7、括号匹配.c 8、冒泡排序.c 9、直接插入排序.c 10、直接选择排序.c 注意,亲测有效!

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 103,550
精华内容 41,420
关键字:

二叉树的建立

友情链接: 排序.zip