C++ 创建和遍历二叉树

一个简单的创建和遍历二叉树的C++程序,二叉树的其他操作程序待更新。

#include <iostream>
using namespace std;
struct BiTNode{
 char data;
 struct BiTNode *lchild, *rchild;//左右孩子
};
BiTNode*T;
void CreateBiTree(BiTNode* &T);
void Inorder(BiTNode* &T);
void PreOrderTraverse(BiTNode* &T);
void Posorder(BiTNode* &T);  

int main(){
cout<<"创建一颗树,其中A->Z字符代表树的数据,用“#”表示空树:"<<endl;
  CreateBiTree(T);
cout<<"先序递归遍历:"<<endl;
PreOrderTraverse(T);
cout<<endl;
cout<<"中序递归遍历:"<<endl;
  Inorder(T);
cout<<endl;
cout<<"后序递归遍历:"<<endl;
        Posorder(T);
cout<<endl;
  return 1;}  

//=============================================先序递归创建二叉树树
void CreateBiTree(BiTNode* &T){
 //按先序输入二叉树中结点的值(一个字符),空格字符代表空树,
 //构造二叉树表表示二叉树T。
 char ch;
 if((ch=getchar())==‘#‘)T=NULL;//其中getchar()为逐个读入标准库函数
 else{
  T=new BiTNode;//产生新的子树
  T->data=ch;//由getchar()逐个读入来
  CreateBiTree(T->lchild);//递归创建左子树
  CreateBiTree(T->rchild);//递归创建右子树
 }
}//CreateTree  

//===============================================先序递归遍历二叉树
void PreOrderTraverse(BiTNode* &T){
 //先序递归遍历二叉树
 if(T){//当结点不为空的时候执行
  cout<<T->data;
  PreOrderTraverse(T->lchild);//
  PreOrderTraverse(T->rchild);
 }
 else cout<<"";
}//PreOrderTraverse  

//================================================中序遍历二叉树
void Inorder(BiTNode* &T){//中序递归遍历二叉树
 if(T){//bt=null退层
  Inorder(T->lchild);//中序遍历左子树
  cout<<T->data;//访问参数
  Inorder(T->rchild);//中序遍历右子树
 }
 else cout<<"";
 }//Inorder  

//=================================================后序递归遍历二叉树
void Posorder(BiTNode* &T){
 if(T){
  Posorder(T->lchild);//后序递归遍历左子树
  Posorder(T->rchild);//后序递归遍历右子树
  cout<<T->data;//访问根结点
 }
 else cout<<"";
}
时间: 2024-10-09 22:27:14

C++ 创建和遍历二叉树的相关文章

python中创建和遍历二叉树

python创建和遍历二叉树,可以使用递归的方式,源代码如下: #!/usr/bin/python class node(): def __init__(self,k=None,l=None,r=None): self.key=k; self.left=l; self.right=r; def create(root): a=raw_input('enter a key:'); if a is '#': root=None; else: root=node(k=a); root.left=cre

二叉树的创建与遍历

#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

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

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

[数据结构]二叉树创建与遍历

实验报告:二叉树创建与遍历 一.问题描述 二叉树是一种实用范围很广的非线性结构,一棵非空二叉树有也只有一个根结点,每个结点最多有两个子树,我们称为左子树与右子树,当一个结点的左.右子树都是空的时,沃恩称此结点为叶子结点. 二叉树有一些很好的性质,这里不再赘述.考虑如何存储一棵树,本实验选择使用链式存储结构——二叉链表:如果事先知道需要存储的二叉树是满二叉树或者完全二叉树,则可以考虑使用顺序存储,否则将浪费大量的存储空间. 对于一棵既成的二叉树,有三种遍历方式——先序.中序与后序.可以证明,一棵形

二叉树的创建、遍历

二叉树的创建.这里采用最简单的情况,创建完全二叉树,用数组来保存: 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 *

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

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

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

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

二叉树创建及遍历

声明:这篇文章是抄袭http://blog.csdn.net/sjf0115/article/details/8645991 请大家自己查看原博客 #include<iostream> #include<stack> #include<queue> using namespace std; //二叉树结点数据结构 typedef struct BiTNode { char data; //数据 struct BiTNode * lchild;//左右孩子指针 struc

中序线索二叉树创建及其遍历

通过考察各种二叉链表,不管儿叉树的形态如何,空链域的个数总是多过非空链域的个数.准确的说,n各结点的二叉链表共有2n个链域,非空链域为n-1个,但其中的空链域却有n+1个.如下图所示. 因此,提出了一种方法,利用原来的空链域存放指针,指向树中其他结点.这种指针称为线索. 记ptr指向二叉链表中的一个结点,以下是建立线索的规则: (1)如果ptr->lchild为空,则存放指向中序遍历序列中该结点的前驱结点.这个结点称为ptr的中序前驱: (2)如果ptr->rchild为空,则存放指向中序遍历