打印二进制树的顶视图

时间:2016-07-06 01:53:00

标签: python binary-tree

我正在尝试打印二叉树的顶视图。我在python中的代码如下:

file_put_contents("/logs/restore.sql",preg_replace("/use(?:.|\n)+?update `notifi(?:.|\n)+?COMMIT\/\*\!\*\/;/mui",'',file_get_contents("/logs/restorex.sql")));

然而,这给出了以下输出: 1 2 5 6

而输出应该是: 1 2 3 6

任何人都可以解释我在做错的地方吗?

2 个答案:

答案 0 :(得分:2)

您正在以深度优先的顺序遍历树。即你正在调用top_view(root.left,m,-1),它将以递归方式搜索树的整个左侧。所以当你调用top_view(root.right,m,1)时,你已经用节点5设置了m [1],而你最终没有将节点3放入。

我认为有两种方法可以解决这个问题:

1)使用队列而不是递归 - 即首先处理级别0的所有节点,然后处理级别1的所有节点,等等。

2)将深度作为递归中的参数传递,并在m dict中存储(节点,深度)对。然后,即使hd在m中,如果它的深度小于当前在m中的节点,则用新节点覆盖它。

答案 1 :(得分:2)

在您的代码中,较低级别的节点比较高级别的节点收集得快,因为您的代码是dfs 添加一个参数(级别)可以解决它。

$zip = new Zip();
$mpdf = null;
foreach ($htmlArr as $name=>$html) {
    if ($mpdf === null) {
        $mpdf = initializePdf();
    }
    $mpdf->WriteHTML($html);
    $zip->addFile($mpdf->Output('', 'S'), $name, microtime());
    $mpdf = null;
}
$zip->sendZip('test.zip', "application/zip", 'test.zip');