所谓二叉树的双序遍历就是,对于二叉树的每个节点来说,先访问该节点,再按照这种方式访问左子树,再访问该节点,再按照双序遍历访问右子树。
该方法其实是对前序遍历进行了改变,多增加了一次访问节点函数的调用。
代码如下:
#include <iostream>
using namespace std;
typedef struct BTNode {
char data;
BTNode *l_child;
BTNode *r_child;
} BTNode;
void Double_order(BTNode *t); //双序遍历
void Vision(BTNode *t);
BTNode *CreateBTree(BTNode *t);
void PreOrder(BTNode *t); //前序遍历
int main() {
auto t = new BTNode;
t = CreateBTree(t);
PreOrder(t);
// Double_order(t);
return 0;
}
BTNode *CreateBTree(BTNode *t) {
char data;
cin >> data;
if (data == '#')
t = nullptr; //创建空树
else {
t = new BTNode;
t->data = data;
t->l_child = CreateBTree(t->l_child);
t->r_child = CreateBTree(t->r_child);
}
return t;
}
void Double_order(BTNode *t) {
if (t != nullptr) {
Vision(t);
Double_order(t->l_child);
Vision(t);
Double_order(t->r_child);
}
}
void Vision(BTNode *t) {
cout << t->data << endl;
}
void PreOrder(BTNode *t) {
if (t != nullptr) {
Vision(t);
PreOrder(t->l_child);
PreOrder(t->r_child);
}
}