#include <iostream>
#include <cstdio>
#include <stack>
using namespace std;
const int N = 105;
struct Node {
char value;
Node* lchild;
Node* rchild;
};
stack<Node*> S;
Node* creatTree() {
char c;
cin >> c;
if(c == '#') return NULL;
Node* root = new Node();
root->value = c;
root->lchild = creatTree();
root->rchild = creatTree();
return root;
}
void inOrder(Node* root) {
Node* p = root;
if(p->lchild) {
inOrder(p->lchild);
}
cout << p->value << ' ';
if(p->rchild) {
inOrder(p->rchild);
}
}
void finOrder(Node* root) {
Node* p = root;
while(1) {
if(p != NULL) {
S.push(p);
p = p->lchild;
}
else {
if(S.empty()) return;
p = S.top();
S.pop();
cout << p->value << ' ';
p = p->rchild;
}
}
}
int main() {
Node* root = creatTree();
inOrder(root);
cout << endl;
finOrder(root);
cout << endl;
return 0;
}
中序遍历二叉树 [非递归]
最新推荐文章于 2025-12-26 19:20:38 发布
本文介绍了一种使用递归方法构建二叉树的方法,并实现了中序遍历的两种方式:递归与非递归。通过输入字符序列创建二叉树结构,然后分别用递归函数和栈实现中序遍历来输出树的节点值。
5034

被折叠的 条评论
为什么被折叠?



