【遍历二叉树算法描述】

文章目录

  • 遍历二叉树算法描述
    • 先序遍历二叉树的操作定义
    • 中序遍历二叉树的操作定义
    • 后序遍历二叉树的操作定义

遍历二叉树算法描述

1.遍历定义:顺着某一条搜索路径寻访二叉树中的结点,使得每一个结点均被访问一次,而且仅访问一次(又称周游)。
2.遍历目的:得到树中所有结点的一个线性排列。
3.遍历用途:他是树结构插入,删除,修改,查找和排序算法的前提,是二叉树一切运算的基础和核心。
4.遍历方法:
依次遍历二叉树中的三个组成部分,便是便利了整个二叉树。
假设:L:遍历左子树,D:访问根结点,R:遍历右子树
则遍历整个二叉树方案共有:DLR,LDR,LRD,DRL,RDL,RLD六种。
若规定先左后右,则只有前三种情况:
DLR-----先根序遍历,
LDR-----中根序遍历
LRD-----后根序遍历

先序遍历二叉树的操作定义

若二叉树为空,则空操作,否则:
(1)访问根结点;
(2)先序遍历左子树;
(3)先序遍历右子树;
【遍历二叉树算法描述】_第1张图片【遍历二叉树算法描述】_第2张图片

中序遍历二叉树的操作定义

若二叉树为空,则空操作,否则:
(1)先序遍历左子树;
(2)访问根结点;
(3)先序遍历右子树;
【遍历二叉树算法描述】_第3张图片
【遍历二叉树算法描述】_第4张图片

后序遍历二叉树的操作定义

若二叉树为空,则空操作,否则:
(1)先序遍历左子树;
(2)先序遍历右子树;
(3)访问根结点;
【遍历二叉树算法描述】_第5张图片
【遍历二叉树算法描述】_第6张图片
例题:已知二叉树的先序和中序序列,构造出相应的二叉树。
【遍历二叉树算法描述】_第7张图片【遍历二叉树算法描述】_第8张图片
【遍历二叉树算法描述】_第9张图片
【遍历二叉树算法描述】_第10张图片
【遍历二叉树算法描述】_第11张图片
这里用到递归,将小的左子树右子树。

int PreOderTraverse(BiTree T) {
	if (T == NULL) {
		return 1;
	}
	else {
		cout << "输出T的头结点的值:" << T->data;
		PreOderTraverse(T->lchild);//递归调用左子树
		PreOderTraverse(T->rchild);//递归调用右子树
	}
}

你可能感兴趣的:(算法,数据结构)