希赛考试网
首页 > 软考 > 软件设计师

6-2 二叉树的遍历 (25 分)

希赛网 2024-01-31 09:46:04

二叉树是计算机科学中常见的数据结构,它由节点和边构成,每个节点最多有两个子节点。二叉树遍历是一种重要的算法,它是按照某种顺序访问二叉树中的各个节点,包括前序遍历、中序遍历和后序遍历。在本篇文章中,我们将从多个角度分析二叉树的遍历算法。

一、前序遍历

前序遍历是按照根节点、左子树、右子树的顺序遍历二叉树,具体实现方式为递归或非递归遍历。递归遍历方法比较简单,代码如下:

```

void preOrderTraversal(Node* root) {

if (root) {

cout << root->val << " ";

preOrderTraversal(root->left);

preOrderTraversal(root->right);

}

}

```

非递归遍历方法需要使用栈来保存节点信息,具体代码如下:

```

void preOrderTraversal(Node* root) {

stack st;

Node* p = root;

while (p || !st.empty()) {

if (p) {

cout << p->val << " ";

st.push(p);

p = p->left;

} else {

p = st.top();

st.pop();

p = p->right;

}

}

}

```

二、中序遍历

中序遍历是按照左子树、根节点、右子树的顺序遍历二叉树,具体实现方式同样为递归或非递归遍历。递归遍历方法如下:

```

void inOrderTraversal(Node* root) {

if (root) {

inOrderTraversal(root->left);

cout << root->val << " ";

inOrderTraversal(root->right);

}

}

```

非递归遍历方法需要使用栈来保存节点信息,具体代码如下:

```

void inOrderTraversal(Node* root) {

stack st;

Node* p = root;

while (p || !st.empty()) {

if (p) {

st.push(p);

p = p->left;

} else {

p = st.top();

st.pop();

cout << p->val << " ";

p = p->right;

}

}

}

```

三、后序遍历

后序遍历是按照左子树、右子树、根节点的顺序遍历二叉树,同样有递归和非递归两种实现方式。递归遍历方法如下:

```

void postOrderTraversal(Node* root) {

if (root) {

postOrderTraversal(root->left);

postOrderTraversal(root->right);

cout << root->val << " ";

}

}

```

非递归遍历方法比较复杂,需要使用两个栈来保存节点信息,具体代码如下:

```

void postOrderTraversal(Node* root) {

if (!root) return;

stack st1, st2;

st1.push(root);

while (!st1.empty()) {

Node* p = st1.top();

st1.pop();

st2.push(p);

if (p->left) st1.push(p->left);

if (p->right) st1.push(p->right);

}

while (!st2.empty()) {

cout << st2.top()->val << " ";

st2.pop();

}

}

```

四、遍历算法的时间复杂度

二叉树的遍历算法时间复杂度为O(n),其中n为二叉树中节点的个数,因为每个节点只会被遍历一次。

五、总结

在本篇文章中,我们了解了二叉树的三种遍历算法,包括前序遍历、中序遍历和后序遍历,以及它们的递归和非递归实现方式。我们还分析了这些算法的时间复杂度,并给出了具体的代码实现。掌握二叉树的遍历算法能够帮助我们更好地理解二叉树数据结构的基本性质和应用。

微信扫一扫,领取最新备考资料


软考.png


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

软考报考咨询

微信扫一扫,定制学习计划