给定有序遍历,如何转换为有序遍历?在完整的二叉树中

时间:2018-12-23 19:25:08

标签: tree binary-tree traversal inorder preorder

考虑到顺序遍历,如何将其转换为预顺序遍历? 假设给定的树是完整的二叉树

示例:

输入:按顺序:{d, b, e, a, f, c, g}

输出:预订:{a, b, d, e, c, f, g}

1 个答案:

答案 0 :(得分:0)

如果要处理完整的二叉树,则数组始终包含2^n - 1个元素。

假设如此,很容易注意到有序遍历的根将始终位于索引(arrayLen / 2) - 1处。从这里可以在数组的两侧使用递归方法。

这是PHP的解决方案(可以转换为任何语言):

function getPreOrder($arr) {
        $num = count($arr) - 1;
        if ($num == 0) // if only 1 element return it
                return $arr;
        $pre = array();
        $pre[]= $arr[$num / 2]; // first is the root (pre-oreder definition)
        $pre = array_merge($pre, getPreOrder(array_slice($arr, 0, $num / 2 ))); //take the left side
        $pre = array_merge($pre, getPreOrder(array_slice ($arr, $num / 2 + 1))); // take the right side
        return $pre;
}

echo implode(",", getPreOrder(array("d", "b", "e", "a", "f", "c", "g")));

这将为您输出:a,b,d,e,c,f,g

希望有帮助!