经常有点小迷糊 2021-07-31 23:19 采纳率: 96.7%
浏览 118
已结题

此题不会做,希望有人能康康(C++)


【描述】
对于一棵包含 n 个节点的二叉树,给点每个节点的父节点编号,求后序遍历序列。

(在该题中,默认第i个点的数值是i)

【输入格式】
第一行给出节点数 n。

第二行给出 n 个数据,第 i 个数据表示第 i 个节点的父结点编号,每个数据间用空格隔开。其中 i 从 0 开始,树的根节点的父节点编号为 -1。

请注意:当第 x 个和第 y 个数据相等,且 x < y 时,则 x 为其父亲的左haizi,y 为其父亲的右haizi。

【输出格式】
给出树的后序遍历序列,数字间用空格隔开,最后一个数后面有空格。

【样例输入】
7

-1 0 0 1 1 2 2

【样例输出】
3 4 1 5 6 2 0

【数据范围】
n 在 50 以内。
  • 写回答

1条回答 默认 最新

  • oier_Asad.Chen 2021-07-31 23:31
    关注

    挺简单的一道模板题,首先根据题意可以建立一颗二叉树(建议用结构体存储当前结点编号、左子树以及右子树编号),形如这样:

    struct node {
        int p; //当前
        int l; //左
        int r; //右
    }
    

    然后就可以愉快地进行后序遍历(左-右-自己,顺序搞清楚),用个递归,如果当前结点不存在(即p为空),那么就可以返回了;反之,先搜左子树,再搜右子树,参考代码:

    
    ```c++
    void nxt(int i) {
        if (!i) {
            return;
        }
        nxt(binary_tree[i].l);
        nxt(binary_tree[i].r);
        cout << binary_tree[i].p << " ";
    }
    

    代码供参考,如有错误请礼貌指出,谢谢!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月10日
  • 已采纳回答 8月2日
  • 创建了问题 7月31日

悬赏问题

  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染