考虑到顺序遍历,如何将其转换为预顺序遍历? 假设给定的树是完整的二叉树。
示例:
输入:按顺序:{d, b, e, a, f, c, g}
输出:预订:{a, b, d, e, c, f, g}
答案 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
。
希望有帮助!