(1)C++采用二叉链表存储结构,完成二叉树的层次遍历,先序遍历的非递归算法和中序遍历的非递归算法。
时间: 2023-06-20 14:07:35 浏览: 125
二叉链表是一种常用的二叉树存储结构,它由指向左右子节点的指针和存储数据的变量组成。下面分别介绍二叉树的层次遍历、先序遍历和中序遍历的非递归实现。
1. 二叉树层次遍历的非递归算法
二叉树的层次遍历可以使用队列来实现。具体步骤如下:
- 将根节点入队。
- 循环执行以下操作,直到队列为空:
- 弹出队首元素,输出它的值。
- 如果它有左子节点,将左子节点入队。
- 如果它有右子节点,将右子节点入队。
C++代码实现如下:
```c++
void levelOrderTraversal(TreeNode* root) {
if (!root) return;
queue<TreeNode*> q;
q.push(root);
while (!q.empty()) {
TreeNode* node = q.front();
q.pop();
cout << node->val << " ";
if (node->left)
q.push(node->left);
if (node->right)
q.push(node->right);
}
}
```
2. 二叉树先序遍历的非递归算法
二叉树先序遍历可以借助栈来实现。具体步骤如下:
- 将根节点入栈。
- 循环执行以下操作,直到栈为空:
- 弹出栈顶元素,输出它的值。
- 如果它有右子节点,将右子节点入栈。
- 如果它有左子节点,将左子节点入栈。
C++代码实现如下:
```c++
void preorderTraversal(TreeNode* root) {
if (!root) return;
stack<TreeNode*> s;
s.push(root);
while (!s.empty()) {
TreeNode* node = s.top();
s.pop();
cout << node->val << " ";
if (node->right)
s.push(node->right);
if (node->left)
s.push(node->left);
}
}
```
3. 二叉树中序遍历的非递归算法
二叉树中序遍历可以借助栈来实现。具体步骤如下:
- 将根节点入栈。
- 循环执行以下操作,直到栈为空:
- 将当前节点的所有左子节点依次入栈。
- 弹出栈顶元素,输出它的值。
- 如果它有右子节点,将右子节点入栈。
C++代码实现如下:
```c++
void inorderTraversal(TreeNode* root) {
if (!root) return;
stack<TreeNode*> s;
TreeNode* node = root;
while (node || !s.empty()) {
while (node) {
s.push(node);
node = node->left;
}
node = s.top();
s.pop();
cout << node->val << " ";
node = node->right;
}
}
```
阅读全文