二叉树学习一:二叉树创建与遍历

  二叉树的遍历有三种方式:

  1)先序遍历:若二叉树为空,则空操作;不为空,则先访问根结点,先序遍历左子树,先序遍历右子树。

  2)后序遍历:若二叉树为空,则空操作;不为空,则中序遍历左子树,访问根结点,中序遍历右子树。

  3)后序遍历:若二叉树为空,则空操作;不为空,则后序遍历左子树,后序遍历右子树,访问根结点。

  例:

  1)先序遍历结果为:ABDECF

  2)中序遍历结果为:DBEAFC

  3)后序遍历结果为:DEBFCA

  二叉树输出的思想是将树转换成线性结构输出,一般采用递归方式,非递归方式是使用栈实现,C++递归实现如下:

 1 #include<iostream>
 2 using namespace std;
 3
 4 typedef struct BiTreeNode{
 5     char data;
 6     BiTreeNode* pLchild;
 7     BiTreeNode* pRchild;
 8 }BiTreeNode, *BiTree;
 9
10 //创建二叉树
11 void  CreateBiTree(BiTree &pTree){
12     char ch;
13     cin >> ch;
14     if (ch == ‘*‘)
15     {
16         pTree = NULL;
17     }
18     else
19     {
20         pTree = new BiTreeNode;
21         pTree->data = ch;
22         CreateBiTree(pTree->pLchild);
23         CreateBiTree(pTree->pRchild);
24     }
25 }
26
27 //先序遍历二叉树
28 void PreOrderTrav(BiTree &pTree){
29     if (pTree != NULL)
30     {
31         cout << pTree->data << ‘\t‘;
32         PreOrderTrav(pTree->pLchild);
33         PreOrderTrav(pTree->pRchild);
34     }
35 }
36
37 //中序遍历
38 void InOrderTrav(BiTree &pTree){
39     if (pTree != NULL)
40     {
41         InOrderTrav(pTree->pLchild);
42         cout << pTree->data << ‘\t‘;
43         InOrderTrav(pTree->pRchild);
44     }
45 }
46
47 //后序遍历
48 void PosOrderTrav(BiTree &pTree){
49     if (pTree != NULL)
50     {
51         PosOrderTrav(pTree->pLchild);
52         PosOrderTrav(pTree->pRchild);
53         cout << pTree->data << ‘\t‘;
54     }
55 }
56
57 void main()
58 {
59     BiTree pTree = NULL;
60     CreateBiTree(pTree);
61     cout << "先序遍历:" << endl;
62     PreOrderTrav(pTree);
63     cout << endl << "中序遍历:" << endl;
64     InOrderTrav(pTree);
65     cout << endl << "后序遍历:" << endl;
66     PosOrderTrav(pTree);
67     cout << endl;
68 }
时间: 2024-10-14 04:51:16

二叉树学习一:二叉树创建与遍历的相关文章

二叉树:树的创建和遍历

前面介绍的链表,栈,队列都是一种顺序容器,访问元素的时候都是通过位置来访问的.如果想要通过值的方式来获取数据,只能通过遍历的方式.这在时间上消耗比较大.而二叉树可以做到不用遍历就可以通过值的方式来获取数据.二叉树是按值来保存元素,也按值来访问元素. 二叉树的相关术语: 树的结点:包含一个数据元素及若干指向子树的分支: 孩子结点:结点的子树的根称为该结点的孩子: 双亲结点:B 结点是A 结点的孩子,则A结点是B 结点的双亲: 兄弟结点:同一双亲的孩子结点: 堂兄结点:同一层上结点: 祖先结点: 从

二叉树的创建与遍历浅析

今天初步了解了二叉树的定义和创建及遍历方法,总结一下 #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; 

日常学习随笔-用链表的形式实现普通二叉树的新增、查找、遍历(前、中、后序)等基础功能(侧重源码+说明)

一.二叉树 1.二叉树的概念 二叉树是每个节点最多有两个子树的树结构.通常子树被称作"左子树"(left subtree)和"右子树"(right subtree),其次序不能任意颠倒. 2.性质 (1)若二叉树的层次从0开始,则在二叉树的第i层至多有2^i个结点(i>=0): (2)高度为k的二叉树最多有2^(k+1) - 1个结点(k>=-1). (空树的高度为-1): (3)对任何一棵二叉树,如果其叶子结点(度为0)数为m, 度为2的结点数为n,

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(BiTN

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

二叉树的基本操作: 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 *

二叉树 二叉树的性质 存储结构 遍历二叉树 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

创建先序二叉树-创建层次遍历树

创建先序二叉树 #include<iostream> using namespace std; class BinTreeNode { public:     char ch;     BinTreeNode(int value){ch=value;}     BinTreeNode *left,*right; }; BinTreeNode* create_tree() {     char item;     BinTreeNode *t,*t_l,*t_r;     cin>>