大话数据结构——二叉树的建立于遍历

#include<iostream>
#include<assert.h>
#include<stdlib.h>
#include <stdio.h>
#include <cstdlib>
using namespace std;

#define OK 1
#define TURE 1
#define ERROR 0
#define FALSE 0
typedef char elemtype;

elemtype ch;
//二叉树的二叉链表结点结构
typedef struct T_tree_node
{
	T_tree_node *L_child;//指向左孩子
	T_tree_node *R_child;//指向右孩子
	elemtype data;//结点数据
}T_tree_node ,*T_tree_pr;

//二叉树的前序遍历算法
void first_search_tree(T_tree_pr T)
{
	if(T==NULL)
	{cout<<‘*‘<<endl;return;}
	cout<<T->data<<endl;//最先显示(操作)双亲结点
	first_search_tree(T->L_child);//先序遍历左子树
	first_search_tree(T->R_child);//先序遍历右子树
}

//二叉树的中序遍历
void mid_search_tree(T_tree_pr T)
{
	if(T==NULL)
		return;
	mid_search_tree(T->L_child);//中序遍历左子树
	cout<<T->data<<endl;//在中间将双亲结点显示
	mid_search_tree(T->R_child);//中序遍历右子树
}

//二叉树的后序遍历
void last_search_tree(T_tree_pr T)
{
	if(T==NULL)
		return;
	last_search_tree(T->L_child);//后序遍历左子树
	last_search_tree(T->R_child);//后序遍历右子树
	cout<<T->data<<endl;//最后显示双亲结点
}

//按前序遍历的顺序输入值
void Great_first_tree(T_tree_pr *T)
{

	//cin>>ch;
	scanf("%c",&ch);
	fflush(stdin);
	if(ch==‘#‘)
		*T=NULL;
	else
	{
		*T=(T_tree_pr)malloc(sizeof(T_tree_node));
		assert((*T)!=NULL);
		(*T)->data=ch;//先输入双亲结点的值
		Great_first_tree(&(*T)->L_child);//左孩子的值
		Great_first_tree(&(*T)->R_child);//右孩子的值
	}
}
int main()
{ 

	T_tree_pr T;
	Great_first_tree(&T);

	first_search_tree(T);
	cout<<"what‘s the func?"<<endl;
	system("pause");
	return 1;
}

  

时间: 2024-10-25 19:45:02

大话数据结构——二叉树的建立于遍历的相关文章

数据结构 二叉树的建立、遍历、销毁的递归算法(C语言)

这些是较为简单的二叉树的建立.遍历.销毁的递归算法.假设二叉树都用二叉链作为存储结构,并约定根节点的指针用T表示. 为了简化问题,我们用char类型的字符代替树中的数据,并且用前序遍历的算法,建立二叉树过程如下: 输入一个根节点. 若输入的是“ ”(即空格字符),则表明改结点为空,T设置为NULL: 若输入的不是“ ”(空格字符),则将字符存入到T->data中,并依次递归建立它的左子树T->lchild,和右子树T->rchild; 测试的源代码如下: 1 #include<st

小朋友学数据结构(3):二叉树的建立和遍历

小朋友学数据结构(3):二叉树的建立和遍历 一.基本概念 BinaryTree.png 二叉树:每个结点的子结点个数不大于2的树,叫做二叉树. 根结点:最顶部的那个结点叫做根结点,根结点是所有子结点的共同祖先.比如上图中的"7"结点就是根结点. 子结点:除了根结点外的结点,都叫子结点. 叶子结点:没有子结点的结点,叫做叶子结点.比如上图中的"1"结点."5"结点和"11"结点. 二叉树的遍历,有三种: (1)前序遍历:先遍历根

[数据结构] 二叉树的建立及其基本操作

如图: 代码: #include <iostream> #include <stdio.h> #include <algorithm> #include <string.h> using namespace std; char ch; typedef struct BinNode { char data; struct BinNode *lchild,*rchild; }BinNode,*BinTree; //二叉树链式存储结构 void CreateBin

二叉树的建立与遍历(山东理工OJ)

数据结构实验之二叉树的建立与遍历 题目描述 已知一个按先序序列输入的字符序列,如abc,,de,g,,f,,,(其中逗号表示空节点).请建立二叉树并按中序和后序方式遍历二叉树,最后求出叶子节点个数和二叉树深度. 输入 输入一个长度小于50个字符的字符串. 输出 输出共有4行: 第1行输出中序遍历序列: 第2行输出后序遍历序列: 第3行输出叶子节点个数: 第4行输出二叉树深度. 示例输入 abc,,de,g,,f,,, 示例输出 cbegdfa cgefdba 3 5 #include <iost

C语言二叉树的建立与遍历

二叉树的建立和遍历都要用到递归,先暂时保存一下代码,其中主要是理解递归的思想,其它的就都好理解了.这里是三种遍历方式,其实理解一种,其它的几个就都理解了,就是打印出来的顺序不一样而已.建立和遍历的方式差不多.也分好几种方式建立,这里 就写一种,就是先序建立 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 typedef struct TreeNode{ 5 char ch; 6 struct TreeNode *lchild, *rch

关于二叉树,建立、遍历、求节点最大距离

今天做了一题求二叉树节点的最大距离,顺便写了下二叉树的建立,遍历的过程. 我觉得这题的主要思想是深度遍历+动态规划,我们在深度遍历的过程中,对于某一个子树,求出左右子树叶子节点到根节点的最大距离,进而求出经过根节点的最大距离. 最后求出所有子树经过根节点的最大距离.就是这个题目的最终结果.代码如下: //二叉树的建立,以及遍历 //16 14 8 2 -1 -1 4 -1 -1 7 1 -1 -1 -1 10 9 -1 -1 3 -1 -1 //16 14 8 2 -1 -1 4 -1 -1 7

二叉树的建立和遍历

二叉树是十分重要的数据结构,主要用来存放数据,并且方便查找等操作,在很多地方有广泛的应用. 今天主要写的最基本的二叉树,后续会继续写线索二叉树,二叉排序树,平衡二叉树等. 二叉树的建立思路仍然是采用的递归的思想,给定一个指向根节点的指针,然后递归调用ceate()函数,自动生成一个二叉树.就像是在地上挖了个坑(根节点),然后他会拿着斧子(create函数)自己挖一颗很大的洞穴(二叉树)出来.当然挖坑前需要先定义每个洞长什么样(定义节点结构). 1 #include<iostream> 2 us

二叉树的建立以及遍历的多种实现(python版)

二叉树是很重要的数据结构,在面试还是日常开发中都是很重要的角色. 首先是建立树的过程,对比C或是C++的实现来讲,其涉及到了较为复杂的指针操作,但是在面向对象的语言中,就不需要考虑指针, 内存等.首先我们需要定义一个树节点, 我们采用基于链表设计的节点, 首先定义一个数据域, 其次就是左孩子和右孩子.如下定义: # 树节点的定义 class Node: def __init__(self, data=-1, lchild=None, rchild=None): self.lchild = lch

线索二叉树的建立与遍历

线索二叉树利用二叉树空余的指针域,来实现二叉树的链式化.然后,就可以通过前驱,后继像双向链表一样根据某种遍历次序对树的结点进行访问. 数据结构: 1 struct node{ 2 int data; 3 struct node* left,*right; 4 int ltag,rtag; //=0时,表明指向子结点:=1时,表示指向前驱/后继 5 } 建立线索二叉树: 不同的遍历顺序,会得到不同的线索二叉树. 一般使第线索链表的头和尾指向NULL(也可以加入一个头指针) 以中序遍历为例:(对左子