二叉树的创建及遍历

输入AB#D##C##回车,或者按照规则自己去输入,

规则就是按前序遍历的方式输入,

#include<cstdio>
#include<cstdlib>
#include<cstring>

typedef struct BiTNode{
	char data;
	struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

void Init(BiTree *T){
	if(!((*T)=(BiTree)malloc(sizeof(BiTNode)))) exit(0);
	*T = NULL;
}
void PreOrderTraverse(BiTree T){	//前序遍历算法
	if(T == NULL) return;
	printf("%c\n",T->data);
	PreOrderTraverse(T->lchild);
	PreOrderTraverse(T->rchild);
}
void InOrderTraverse(BiTree T){	//中序遍历算法
	if(T == NULL) return;
	InOrderTraverse(T->lchild);
	printf("%c\n",T->data);
	InOrderTraverse(T->rchild);
}
void PostOrderTraverse(BiTree T){	//后序遍历算法
	if(T == NULL) return;
	PostOrderTraverse(T->lchild);
	PostOrderTraverse(T->rchild);
	printf("%c\n",T->data);
}
void CreateBiTree(BiTree *T){ //创建二叉树 AB#D##C##回车
	char ch;
	scanf("%c",&ch);
	if(ch == ‘#‘) *T = NULL;
	else{
		*T = (BiTree)malloc(sizeof(BiTNode));
		if(!*T) exit(0);
		(*T)->data = ch;
		CreateBiTree(&(*T)->lchild);
		CreateBiTree(&(*T)->rchild);
	}
}
int main(){
	BiTree T;
//	Init(&T);
	CreateBiTree(&T);
	printf("前序遍历为:\n");
	PreOrderTraverse(T);
	printf("中序遍历为:\n");
	InOrderTraverse(T);
	printf("后序遍历为:\n");
	PostOrderTraverse(T);
	return 0 ;
}

  

时间: 2024-10-31 06:10:47

二叉树的创建及遍历的相关文章

二叉树的创建、遍历

二叉树的创建.这里采用最简单的情况,创建完全二叉树,用数组来保存: 1 struct TreeNode 2 { 3 int val; 4 TreeNode *left, *right; 5 TreeNode(int x): val(x), left(NULL), right(NULL) {}; 6 }; 7 8 void CreatTree(TreeNode *root, int idx, int A[], int n) //root结点已分配,idx为根结点的编号 9 { 10 if(2 *

二叉树 二叉树的性质 存储结构 遍历二叉树 C实现二叉树的创建和遍历 线索二叉树

定义 二叉树(binary tree)是n(n>=0)个结点的有限集合,该集合为空集合称为空二叉树,或者有一个根结点和两棵互不相交的,分别称为树根结点的左孩子树和右孩子树组成. 二叉树的特点 每个结点最多有两棵子树,所以二叉树总没有度大于2的结点 左子树和右子树是有顺序的,次数不能任意颠倒 即使树中某结点只有一棵子树,也要区分是左子树还是右子树 特殊的二叉树 1. 斜树 所有的结点都只有左子树的二叉树称为左斜树; 所有的结点都只有右子树的二叉树称为右斜树; 这两者统称为斜树 2. 满二叉树 在一

c/c++二叉树的创建与遍历(非递归遍历左右中,破坏树结构)

二叉树的创建与遍历(非递归遍历左右中,破坏树结构) 创建 二叉树的递归3种遍历方式: 1,先中心,再左树,再右树 2,先左树,再中心,再右树 3,先左树,再右树,再中心 二叉树的非递归4种遍历方式: 1,先中心,再左树,再右树 2,先左树,再中心,再右树 3,先左树,再右树,再中心 4,层级遍历 二叉树的查找,求高度,求个数,求父节点,复制二叉树,释放二叉树 编译方法,用gcc编译不过去,用g++编译,命令如下: g++ -g nodestack.c nodequeue.c bintree.c

数据结构与算法第10周作业——二叉树的创建和遍历算法

一.二叉树的创建算法(递归方式) 二.二叉树的先序.中序和后序遍历算法 #include<stdio.h>#include<stdlib.h>typedef struct TNode{ struct TNode *lchild; int data; struct TNode *rchild;}TNode,*BTree;void createBiTree(BTree &T){ char x; scanf("%d",&x); if(x!=0) { T

【数据结构之二叉树】二叉树的创建、遍历等操作

二叉树的基本操作: 1.创建二叉树 2.销毁二叉树 3.遍历二叉树:1)前序遍历 2)中序遍历 3)后序遍历 4)层次遍历 4.搜索二叉树 5.删除子叶 6.插入子叶 7.获取左/右子叶的值 8.获取树深度 9.获取叶子结点数 1.创建二叉树 这里创建的是链式存储结构的二叉树,包含数据域,左右两结点的指针域:在读取创建树时,以#代替空格,输入格式的规范为:以前序遍历的顺序输入,如果该结点的左子叶为空,则输入#,以此类推: e.g: -  +         \ a    *    e    f 

Java实现二叉树的创建和遍历操作(有更新)

博主强烈建议跳过分割线前面的部分,直接看下文更新的那些即可. 最近在学习二叉树的相关知识,一开始真的是毫无头绪.本来学的是C++二叉树,但苦于编译器老是出故障,于是就转用Java来实现二叉树的操作.但是二者原理是一致的,而且实现的方式也是大同小异! 下面就让我们来看看代码吧. 1.首先我们需要创建一个二叉树的节点类,便于我们对树的操作,当然了,你也可以在二叉树类的内部将节点类声明为内部类,但是这样会降低操作的灵活性.我才用的是单独创建一个BinaryTreeNode类,代码如下: package

二叉树的创建与遍历浅析

今天初步了解了二叉树的定义和创建及遍历方法,总结一下 #include <iostream>#include <stdio.h>#include <string.h>using namespace std;//二叉树结点的定义typedef struct BTNode{char data;struct BTNode *lc;struct BTNode *rc;}BTNode,*BiTree; void Creat(BiTree &T){    char ch; 

二叉树的创建与遍历(链式存储)

这里采用的是链式存储,每个结点包含三个属性(指向左右孩子的指针和本结点的数据),如果想了解顺序存储二叉树,可以参考http://www.cnblogs.com/-beyond/p/6065189.html 采用先序递归创建二叉树,叶子的左右孩子链域为NULL 输入的顺序为:abd--e--c-f--   (-表示空一个空格) #include<iostream> #include<cstdio> using namespace std; struct BiTNode{ BiTNod

二叉树的创建与遍历

#include<iostream>using namespace std; typedef char ELEMTYPE; //二叉链表typedef struct BiTNode{ ELEMTYPE data; struct BiTNode *lChild; struct BiTNode *rChild; }BiTNode,*BiTPtr; //创建二叉树,使用前序遍历的方式输入数据void CreateBiTree(BiTPtr *T){ char c; scanf("%c&qu