博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构 &二叉树(二)
阅读量:780 次
发布时间:2019-03-25

本文共 1044 字,大约阅读时间需要 3 分钟。

首先我们对二叉树的结构进行设计,以’#'作为结束符,对类型进行重定义。

#define END '#'typedef char ElemType;

二叉链表的结构设计:

typedef struct BtNode//BinaryTreeNode{
struct BtNode* leftchild;//左孩子节点 struct BtNode* rightchild;//右孩子节点 ElemType data;//数据域}BtNode,*BinaryTree;

三叉链表的结构设计:

typedef struct BtNode//BinaryTreeNode{
struct BtNode* leftchild;//左孩子节点 struct BtNode* parent;//双亲指针 struct BtNode* rightchild;//右孩子节点 ElemType data;//数据域}BtNode,*BinaryTree;

二叉树的遍历:

所谓树的遍历,就是按照某种次序遍历树中的节点,要求每个节点访问仅且访问一次
设访问根节点记作V,遍历根的左子树记作L,遍历根的右子树记作R,则有以下几种遍历方式:
在这里插入图片描述
下面是前序遍历、中序遍历以及后序遍历的规则:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
按照上面规则,我们给出下面这颗二叉树的前序、中序以及后序遍历:

在这里插入图片描述

其前序遍历为:ABCDEFGH
中序遍历为:CBEDFAGH
后序遍历为:CEFDBHGA

下面我们来给出中序遍历的代码:

void InOrder(BtNode* p){
if (p != NULL) {
InOrder(p->leftchild); printf("%c ", p->data); InOrder(p->rightchild); }}

前序遍历代码:

void FrontOrder(BtNode* p){
if (p != NULL) {
printf("%c ", p->data); FrontOrder(p->leftchild); FrontOrder(p->rightchild); }}

后序遍历代码:

void EndOrder(BtNode* p){
if (p != NULL) {
EndOrder(p->leftchild); EndOrder(p->rightchild); printf("%c ", p->data); }}

转载地址:http://cmtuk.baihongyu.com/

你可能感兴趣的文章