前言
二叉树的抽象数据类型定义
类型名称:二叉树
数据对象集:一个有穷的结点集合。
若不为空,则由根结点和其左、右二叉子树组成。
操作集:BT∈BinTree, Item∈ElementType,重要操作有:
- Boolean IsEmpty( BinTree BT ):判别BT是 否为空;
- void Traversal( BinTree BT):遍历,按某顺序访问每个结点;
- BinTree CreatBinTree():创建一个二叉树。
常用的遍历方法有:
- void PreOrderTraversal( BinTree BT):先序—根、 左子树、右子树;
- void InOrderTraversal( BinTree BT ):中序–左子树、根、右子树;
- void PostOrderTraversal( BinTree BT):后序–左子树、右子树、根
- void LevelOrderTraversal( BinTree BT):层次遍历,从上到下、从左到右
二叉树的遍历
(1)先序遍历
遍历过程为:
①访问根结点;
②先序遍历其左子树;
③先序遍历其右子树。
例如下图
A (BDFE) (CGHI)
先序遍历=> A B D F E C G H I
递归实现先序遍历
#include<bits/stdc++.h>
using namespace std;
struct BinTree {
int Data;
struct BinTree* Left;
struct BinTree* Right;
};
void PreOrderTraversal(BinTree* BT) {
if (BT) {
cout << BT->Data << endl;
PreOrderTraversal(BT->Left);
PreOrderTraversal(BT->Right);
}
}
先序遍历非递归遍历算法
➢遇到一个结点,把它记住并弹出,再去遍历它的左子树;
➢当左子树遍历结束后,从记住的结点去访问并遍历它的右子树;
void PreOrderTraversal