A1086 Tree Traversals Again (25 分)

思路如下

通过观察题目可以发现 "Pop" 的就是中序序列打印出来的数据如题意给出即中序序列为 "3 2 4 1 6 5"。但问题是我当前 "Pop" 比如打印 3,前面 1 和 2 都是 3 的祖先,这应该用什么方法在未确定祖先的情况下打印子孙结点——我想到了递归,递归就是把一件事先走到最底做,然后再回过头来做——对应这里是我不管前面 1 和 2,先关注最后的 3

那么大致思路可以得到了,遇到 "Push" 的时候就新建 node_t 类型结点并赋值数据域;遇到 "Pop" 的时候返回,我试着顺着这个思路模拟发现可行:

遇到 "Push" 的处理手法:

 遇到 "Pop" 的处理手法:

有兴趣的读者可以试试模拟,就不继续画了,有点丑(捂脸)

/* 伪码 */

node_t *create() {
    if (遇到 "Pop")    return NULL;

    node_t *root = new node_t;
    root->data = push_x();
    root->left = create();
    root->right = create();

    return root;
}

剩下的就是 1) 处理输入;以及2) 后序遍历,不过都很简单

点击获取完整代码

 
原文地址:https://www.cnblogs.com/bEngi1/p/14418203.html