三种遍历方式确定二叉树的思考

  • 首先我们都知道数据结构老师讲的:前序+中序、前序+后序确定唯一的一棵二叉树,单独的前序+后序只能确定根的位置,而其左右孩子的排列是不能确定的,如左单枝或右单枝遍历得到的是相同的序列。
  • 接着就引出关于二叉树为什么在遍历过程中出现不能唯一确定的问题。由完整的一颗二叉树得到一定的序列,我们看似完整记录了树的信息,但其实在遍历的时候有很多细节是在“左,根,右”等规则约束下被忽略了的,比如三个结点构成的二叉树有五种情况,因为我们忽略了一些信息,所以就难以还原最初的形态。这个很像HASH表,将信息散列后是不可逆的,我们不可能根据散列得到的结果和哈希函数去还原最初的地址。
  • 所以前序和后序能唯一的确定一棵树吗?肯定可以,我们只是需要补充信息,这就引出了扩展二叉树:用“#” “。”等表示空结点,遍历过程同时记录空结点,由于树的结点只有三种情况:n0表示叶子,扩展二叉树中必定在序列中和两个空符号紧邻,n1表示只有一个空结点,另一个有n0,n1,n2三种情况,那么如果我们已知了序列的头或尾,按照一定顺序从叶子开始处理,那么n1也就能确定了,这个样子逐层解读划分子树直到头尾。

     

posted @   leoyin59123  阅读(104)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示