希赛考试网
首页 > 软考 > 信息系统管理工程师

二叉树遍历方法

希赛网 2023-11-11 17:55:54

二叉树是一种常见的数据结构,它是由n个节点组成的集合,其中每个节点至多有两个子节点,这两个子节点称为左子节点和右子节点。在二叉树中,遍历是指按照一定的顺序依次访问每个节点的操作。二叉树的遍历方法包括前序遍历、中序遍历和后序遍历三种方式。本文将从多个角度分析二叉树遍历方法。

一、前序遍历

前序遍历也称为先序遍历,是二叉树遍历的一种方式。在前序遍历中,先访问根节点,然后按照先左后右的顺序遍历左子树和右子树。前序遍历可以使用递归或非递归方式实现。

递归方式实现前序遍历的代码如下:

```

void PreOrderTraversal(BinaryTree *pTree)

{

if (pTree == NULL) return;

printf("%d ", pTree->val);

PreOrderTraversal(pTree->left);

PreOrderTraversal(pTree->right);

}

```

非递归方式实现前序遍历的代码如下:

```

void PreOrderTraversal(BinaryTree *pTree)

{

if (pTree == NULL) return;

stack s;

s.push(pTree);

while (!s.empty()) {

BinaryTree *pNode = s.top();

s.pop();

printf("%d ", pNode->val);

if (pNode->right) s.push(pNode->right);

if (pNode->left) s.push(pNode->left);

}

}

```

二、中序遍历

中序遍历是指按照左、根、右的顺序遍历二叉树。在中序遍历中,先遍历左子树,然后访问根节点,最后遍历右子树。同样,中序遍历也可以使用递归或非递归方式实现。

递归方式实现中序遍历的代码如下:

```

void InOrderTraversal(BinaryTree *pTree)

{

if (pTree == NULL) return;

InOrderTraversal(pTree->left);

printf("%d ", pTree->val);

InOrderTraversal(pTree->right);

}

```

非递归方式实现中序遍历的代码如下:

```

void InOrderTraversal(BinaryTree *pTree)

{

if (pTree == NULL) return;

stack s;

BinaryTree *pNode = pTree;

while (pNode || !s.empty()) {

while (pNode) {

s.push(pNode);

pNode = pNode->left;

}

pNode = s.top();

s.pop();

printf("%d ", pNode->val);

pNode = pNode->right;

}

}

```

三、后序遍历

后序遍历是指按照左、右、根的顺序遍历二叉树。在后序遍历中,先遍历左子树,然后遍历右子树,最后访问根节点。同样,后序遍历也可以使用递归或非递归方式实现。

递归方式实现后序遍历的代码如下:

```

void PostOrderTraversal(BinaryTree *pTree)

{

if (pTree == NULL) return;

PostOrderTraversal(pTree->left);

PostOrderTraversal(pTree->right);

printf("%d ", pTree->val);

}

```

非递归方式实现后序遍历的代码如下:

```

void PostOrderTraversal(BinaryTree *pTree)

{

if (pTree == NULL) return;

stack s1, s2;

s1.push(pTree);

while (!s1.empty()) {

BinaryTree *pNode = s1.top();

s1.pop();

s2.push(pNode);

if (pNode->left) s1.push(pNode->left);

if (pNode->right) s1.push(pNode->right);

}

while (!s2.empty()) {

BinaryTree *pNode = s2.top();

s2.pop();

printf("%d ", pNode->val);

}

}

```

综上所述,二叉树遍历方法包括前序遍历、中序遍历和后序遍历三种方式。其中,前序遍历先访问根节点,然后按照先左后右的顺序遍历左子树和右子树;中序遍历先遍历左子树,然后访问根节点,最后遍历右子树;后序遍历先遍历左子树,然后遍历右子树,最后访问根节点。递归和非递归方式都可以实现以上三种遍历方式,具体实现根据实际情况选择。本文旨在讲解二叉树遍历方法,便于读者深入了解和掌握相关知识。

扫码咨询 领取资料


软考.png


信息系统管理工程师 资料下载
备考资料包大放送!涵盖报考指南、考情深度解析、知识点全面梳理、思维导图等,免费领取,助你备考无忧!
立即下载
信息系统管理工程师 历年真题
汇聚经典真题,展现考试脉络。精准覆盖考点,助您深入备考。细致解析,助您查漏补缺。
立即做题

软考资格查询系统

扫一扫,自助查询报考条件