试给出二叉树的自下而上、从右往左的层次遍历算法
#include <iostream>
#include <stack>
#include <queue>
typedef struct treenode{
char data;
struct treenode* left;
struct treenode* right;
}treenode,*ptreenode;
ptreenode buytreenode(char x)
{
ptreenode n=(ptreenode) malloc(sizeof (treenode));
n->data=x,n->left= nullptr,n->right= nullptr;
return n;
}
ptreenode build_tree()
{
ptreenode root= buytreenode('A');
root->left= buytreenode('B');
root->right= buytreenode('C');
root->left->left= buytreenode('D');
root->left->right= buytreenode('E');
return root;
}
void print(ptreenode root)
{
std::queue<ptreenode> tmp;
std::stack<ptreenode> record;
tmp.push(root);
while(!tmp.empty()){
ptreenode t=tmp.front();
tmp.pop();
if(t->left) tmp.push(t->left);
if(t->right) tmp.push(t->right);
record.push(t);
}
while(!record.empty()){
printf("%3c",record.top()->data);
record.pop();
}
}
int main() {
ptreenode root=build_tree();
print(root);
return 0;
}