先序遍历:1.访问根结点 2.先序遍历根结点的左子树 3.先序遍历根结点的右子树
中序遍历:1.中序遍历根结点的左子树 2.访问根结点 3.中序遍历根结点的右子树
后序遍历: 1.后序遍历根结点的左子树 2.后序遍历根结点的右子树 3.访问根结点
二叉树的顺序存储结构:
二叉树的顺序存储结构是用一组连续的存储单元存放二叉树的数据元素。顺序存储二叉树时,首先对二叉树中的结点按照满二叉树的形式进行编号,不存在的结点也要编号,之后将编号为i的结点存储在数据的第i-1个分量中。但是一般的二叉树也必须按完全二叉树的形式存储,但是对于那些单支较多的二叉树来说不合适,因为将造成太多空间的浪费。但是比较适合满二叉树和完全二叉树。
二叉树的链式存储结构:
二叉链表存储:如果每个结点结构由一个数据域和俩个分别指向其左、右子树的指针组成。data域存放结点的数据信息,lchild与rchild存放指向左孩子和右孩子的指针
三叉链表存储:三叉链表是在二叉链表的基础上加一个指向双亲结点的指域parent,既便于查找每个结点的孩子结点,又便于查找其双亲结点。但是增加了存储空间的开销。 尽管二叉链表中无法由结点直接找到其双亲,但由于二叉链表结构灵活,操作方便,对于一般情况的二叉树,甚至比顺序存储结构还节省空间。因此,二叉链表是常用的二叉树存储方式。
二叉树的二叉链表实现遍历:
#include<iostream>
#include"DoubleNode.h" //双链表结点类
#include"SeqStack.h" //顺序栈
#include"LinkedStack.h" //链式栈
#include"SeqQueue.h" //顺序循环队列
using namespace std;
template <class T>
class BinaryTree // 二叉树类
{
public:
DoubleNode<T> *root; //指向根结点
BinaryTree(); //构造空二叉树
BinaryTree(T prelist [],int n); //标明空子树的先根序列构造一棵二叉树
BinaryTree(T prelist [],T inlist [],int n); //先根和中根序列构造二叉树
~BinaryTree();
bool IsEmpty(); //判断是否是空二叉树
int Count(); //返回结点个数
int Height(); //返回二叉树的高度
DoubleNode<T> *Search(T value); //查找首次出现值为value的结点
Double