我正在尝试打印二叉树的顶视图。我在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
任何人都可以解释我在做错的地方吗?
答案 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');