Pluto411 2023-12-01 17:18 采纳率: 100%
浏览 8
已结题

二叉树的算法,数据结构伪代码题

img

这个算法功能什么啊,有没有人帮我解惑,非常感谢。不要求有过程,有答案描述就可以了。

  • 写回答

2条回答 默认 最新

  • 重走菜鸟路 2023-12-01 20:26
    关注

    求二叉树的前序遍历产生的字符序列的第k个值,此算法不是以递归写法而是以迭代写法写出的

    • 存在,返回第k个值
    • 不存在,返回'#'
    /*
     * 前序遍历是按照: 左 中 右的顺序进行遍历的
     * 给定二叉树以及序号k
     */
    ElemType Unknown(BiTNode *T, int k) {
        BiTNode *Stack[MaxSize], *p;
        int top = -1, n = 0;
        p = T;
        while (top > - 1 || p != NULL) {
            /* 
             * 遍历左子树(左)
             * 走到树的最左下角,第一个没有左孩子节点的节点
             * 期间经过的节点入栈,待当前子树遍历完成后相当于之前入栈节点的左子树遍历完成
             */
            while (p != NULL) { 
                top++;
                Stack[top] = p; 
                p = p->lchild;  
            }
            if (top > - 1) {
                p = Stack[top]; //遍历根节点(中)
                top--;
                n++;
                if (n == k)
                    return p->data; //前序序列第k个节点,返回其值
                p = p->rchild; //遍历右子树(右)
            }
        }
        return '#';//遍历到头,不够k个节点,k取值过大,返回类似空标记
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月10日
  • 已采纳回答 12月2日
  • 创建了问题 12月1日