我正在尝试二叉树实现。我使用std::list
来表示实际的二叉树。
我已经编写了一个lambda函数lnkNodes
作为实现的一部分,将二叉树的各个节点链接在一起。链接节点所采用的逻辑在源代码中作为注释提供,可以从下面给出的链接下载。
下载源代码的链接:
这两个相关文件是stack_overflow.hpp
和stack_overflow.cpp
。
我使用以下命令编译代码,使用相关的调试标志:
g++ -D<debug flag> -ggdb -std=c++14 -Wall stack_overflow.cpp
我使用调试标志DBG1
和DBG2
来从代码中启用不同的调试打印,并且我从基于每种情况下的调试打印的实现的预期逻辑中看到的差异,已在下面讨论过。
由于启用每个调试标志(使用脚本实用程序捕获)而导致的输出也已上载到上述链接。相应的文件名分别为DBG1_log.txt
和DBG2_log.txt
。
调试标志DBG1
视频DBG1_log.txt
这里的问题是,对于每个节点,除节点1外,打印的父节点不符合实现逻辑(stack_overflow.hpp
中的视频注释行号131-145)。例如,对于节点3,父节点应该是节点1.在所有节点的情况下存在类似的差异。
然而,根据实现逻辑输出每个节点的子节点。
上述情况令我感到困惑,因为根据stack_overflow.hpp
文件中168-171和184-185行的代码段,链接是在两个方向建立的,即从父级到孩子,反之亦然。
调试标志DBG2
视频DBG2_log.txt
在这种情况下,父数据和子数据重复相同的数据。我在退出前一个do-while循环后立即打印节点数据(stack_overflow.hpp
中的第203行视频),其中节点链接在一起,并生成对应于调试标志DBG1的调试打印。
我感到困惑的是,即使我在链接期间和之后打印同一容器的内容(stack_overflow.hpp
文件中的第149行和第204行),输出也是不同的如白垩和奶酪。
我欢迎你的见解来克服这些问题。