用C++编写算法实现按中序次序输出二叉树中各结点的值及其所对应的层次数。
时间: 2024-02-15 12:04:01 浏览: 122
好的,下面是算法实现及其注释,希望能对你有所帮助:
```C++
#include <iostream>
#include <stack>
using namespace std;
// 二叉树结点的定义
struct TreeNode {
int val; // 结点的值
TreeNode* left; // 左子树指针
TreeNode* right; // 右子树指针
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
// 按中序次序输出二叉树中各结点的值及其所对应的层次数
void inorder(TreeNode* root) {
if (!root) return; // 如果结点为空,直接返回
stack<pair<TreeNode*, int>> stk; // 定义一个栈,存储结点及其所处的层次数
int level = 0; // 初始化层次数为0
while (root || !stk.empty()) { // 如果结点不为空或者栈不为空,就继续循环
while (root) { // 如果结点不为空
stk.push(make_pair(root, ++level)); // 将结点和层次数压入栈中
root = root->left; // 继续遍历左子树
}
if (!stk.empty()) { // 如果栈不为空
auto p = stk.top(); // 取出栈顶元素
stk.pop(); // 弹出栈顶元素
cout << "val: " << p.first->val << ", level: " << p.second << endl; // 输出结点值和层次数
root = p.first->right; // 继续遍历右子树
}
}
}
int main() {
// 示例:构建一棵二叉树
TreeNode* root = new TreeNode(1);
root->left = new TreeNode(2);
root->right = new TreeNode(3);
root->left->left = new TreeNode(4);
root->left->right = new TreeNode(5);
root->right->left = new TreeNode(6);
root->right->right = new TreeNode(7);
// 按中序次序输出二叉树中各结点的值及其所对应的层次数
inorder(root);
return 0;
}
```
注:以上代码实现了中序遍历输出二叉树中各结点的值及其所对应的层次数。具体实现方式为:利用栈模拟递归过程,将结点及其所处的层次数压入栈中,在遍历过程中逐个弹出栈中元素,输出结点和层次数,并继续遍历右子树。
阅读全文