软考
APP下载

二叉树遍历方法

二叉树是一种常见的数据结构,它是由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);

}

}

```

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

备考资料 免费领取:信息系统管理工程师报考指南+考情分析+思维导图等 立即下载
真题演练 精准解析历年真题,助你高效备考! 立即做题
相关阅读
信息系统管理工程师题库