序列节点根据前中后序和层序重建二叉树(PAT1020、PAT1043)
2013-05-06 20:44
337 查看
在写这篇文章之前,xxx已经写过了几篇关于改序列节点主题的文章,想要了解的朋友可以去翻一下之前的文章
欢送拜访新博客,这里有更好的排版哦 ; ) 点击打开链接
背景
《二叉树的历遍(递归、非递归)分析》结总了二叉树不同历遍方法的递归和非递归现实,本文则论讨如何针对不同历遍方法的组合重建二叉树。为了简化问题的虑考,定假二叉树中不会涌现重复值。列入虑考围范的有序前、中序、后序、层序历遍这四种的组合。前中后序较比见常,而层序则绝对殊特一点了。
PAT的1043和1020题是历遍关相的模板题,恰好派上用场。
中序+序前
法算描述:
初始:用序前历遍序列定确根节点,在中序历遍序列中找到该根节点,则阁下子树别分为中序中该节点阁下的序列。
迭代:对各个子树别分行执三步操纵,1.在序前序列中找子树的根节点;2。在中序序列中找子树的根节点,并划开分根节点的阁下子树;3.根据新成生的阁下子树,在序前序列中划开分这些节点,从而失掉了两颗子树的序前、中序序列。
训练:PAT1043:Is It a Binary Search Tree
题意:
入输一个树的序前历遍序列,定判这个树否是是二叉搜索树或者BST的镜像树,如果是,则用后序序列输出。
解题路思:
1.BST很殊特,实质上BST的有所节点的序顺排列就是中序历遍了。
2.要查检树否是是BST或者镜像BST,需只按照重建树的路思,在每次重建的过程当中做恰当查检可即。查检路思是:查检序前历遍序列中,根节点以后的节点序排否是符合BST的二分则规(即前一段都是小于根节点的,后一段都是大于根节点的)。
3.最后的输出是后序历遍。过程当中其实并用不构建个整树,直接在处置过程当中,按后序的方法存储节点到列队中可即。
有了这些虑考,就可以够写出代码啦。具体解题代码见链接PAT1043
中序+后序
法算描述:
初始:用后序历遍序列定确根节点,在中序历遍序列中找到该根节点,则阁下子树别分为中序中该节点阁下的序列。
迭代:对各个子树别分行执三步操纵,1.在后序序列中找子树的根节点;2。在中序序列中找子树的根节点,并划开分根节点的阁下子树;3.根据新成生的阁下子树,在后序序列中划开分这些节点,从而失掉了两颗子树的后序、中序序列。
每日一理道
我拽着春姑娘的衣裙,春姑娘把我带到了绿色的世界里。
训练:PAT1020:Tree Traversals
题意:
入输为一棵二叉树的后序历遍序列和中序历遍序列。求树的序前历遍序列。
解题路思:
1.有了中序和后序,就可以重建树。
2.最后的输出是序前历遍。过程当中其实并用不构建个整树。直接在处置过程当中,按序前的方法存储节点到列队中可即。
具体解题代码见链接PAT1020
中序+层序
法算描述:
初始:用层序历遍定确顶节点,在中序历遍中,利用顶节点分别出阁下子树。
迭代:对各个子树别分行执三步操纵,1.在层序序列中,找出子树节点集合中,最靠前的节点,这个节点即为子树的顶节点;2.在中序序列中找1中失掉的顶节点,并划开分顶节点的阁下子树;
跟(中序+序前)和(中序+后序)不同之处在于没有迭代的第3步,层序是没法直接分别失掉阁下子树的节点集合的。但这不并碍妨常正的处置。层序是用来找到子树的顶节点的,而顶节点等于有所子树的节点中,在层序历遍中最靠前的节点。
序前+后序
这个组合是没法重建定确的二叉树的。
对于满二叉树,利用子树节点的排列序顺能区开分阁下子树节点集合,构建是没有问题的。但一旦有单个叶子的节点存在,则没法定确叶子是左儿子还是右儿子。因为无论是序前还是后序序列,都没法表现单个儿子况情下,儿子的位置。序前会将阁下子树的点置于节点以后,后序则是将阁下子树的点置于节点之前。
举个简略的反例:
给出如下的序前序列和后序序列: preorder: A, B; postorder: B, A
能构建的二叉树有两种可能,1.A是根节点,B是A左儿子; 2.A是根节点, B是A的右儿子。没法失掉一个独一的结果。
序前+层序
这个组合也是没法重建定确的二叉树的。一样于后序+层序的况情。
理道跟(序前+后序)的理道一样,无论是序前、后序,还是层序,都是没法定确单个儿子节点况情下儿子节点的序顺。
结总
中序历遍配合另外任何一个历遍,能重建二叉树。其他的恣意两个序列的组合都不能独一的定确重建的二叉树。
PS:
欢送拜访新博客,这里有更好的排版哦 ; ) 点击打开链接
文章结束给大家分享下程序员的一些笑话语录:
问答
Q:你是怎么区分一个内向的程序员和一个外向的程序员的? A:外向的程序员会看着你的鞋和你说话时。
Q:为什么程序员不能区分万圣节和圣诞节? A:这是因为 Oct 31 == Dec 25!(八进制的 31==十进制的 25)
欢送拜访新博客,这里有更好的排版哦 ; ) 点击打开链接
背景
《二叉树的历遍(递归、非递归)分析》结总了二叉树不同历遍方法的递归和非递归现实,本文则论讨如何针对不同历遍方法的组合重建二叉树。为了简化问题的虑考,定假二叉树中不会涌现重复值。列入虑考围范的有序前、中序、后序、层序历遍这四种的组合。前中后序较比见常,而层序则绝对殊特一点了。
PAT的1043和1020题是历遍关相的模板题,恰好派上用场。
中序+序前
法算描述:
初始:用序前历遍序列定确根节点,在中序历遍序列中找到该根节点,则阁下子树别分为中序中该节点阁下的序列。
迭代:对各个子树别分行执三步操纵,1.在序前序列中找子树的根节点;2。在中序序列中找子树的根节点,并划开分根节点的阁下子树;3.根据新成生的阁下子树,在序前序列中划开分这些节点,从而失掉了两颗子树的序前、中序序列。
训练:PAT1043:Is It a Binary Search Tree
题意:
入输一个树的序前历遍序列,定判这个树否是是二叉搜索树或者BST的镜像树,如果是,则用后序序列输出。
解题路思:
1.BST很殊特,实质上BST的有所节点的序顺排列就是中序历遍了。
2.要查检树否是是BST或者镜像BST,需只按照重建树的路思,在每次重建的过程当中做恰当查检可即。查检路思是:查检序前历遍序列中,根节点以后的节点序排否是符合BST的二分则规(即前一段都是小于根节点的,后一段都是大于根节点的)。
3.最后的输出是后序历遍。过程当中其实并用不构建个整树,直接在处置过程当中,按后序的方法存储节点到列队中可即。
有了这些虑考,就可以够写出代码啦。具体解题代码见链接PAT1043
中序+后序
法算描述:
初始:用后序历遍序列定确根节点,在中序历遍序列中找到该根节点,则阁下子树别分为中序中该节点阁下的序列。
迭代:对各个子树别分行执三步操纵,1.在后序序列中找子树的根节点;2。在中序序列中找子树的根节点,并划开分根节点的阁下子树;3.根据新成生的阁下子树,在后序序列中划开分这些节点,从而失掉了两颗子树的后序、中序序列。
每日一理道
我拽着春姑娘的衣裙,春姑娘把我带到了绿色的世界里。
训练:PAT1020:Tree Traversals
题意:
入输为一棵二叉树的后序历遍序列和中序历遍序列。求树的序前历遍序列。
解题路思:
1.有了中序和后序,就可以重建树。
2.最后的输出是序前历遍。过程当中其实并用不构建个整树。直接在处置过程当中,按序前的方法存储节点到列队中可即。
具体解题代码见链接PAT1020
中序+层序
法算描述:
初始:用层序历遍定确顶节点,在中序历遍中,利用顶节点分别出阁下子树。
迭代:对各个子树别分行执三步操纵,1.在层序序列中,找出子树节点集合中,最靠前的节点,这个节点即为子树的顶节点;2.在中序序列中找1中失掉的顶节点,并划开分顶节点的阁下子树;
跟(中序+序前)和(中序+后序)不同之处在于没有迭代的第3步,层序是没法直接分别失掉阁下子树的节点集合的。但这不并碍妨常正的处置。层序是用来找到子树的顶节点的,而顶节点等于有所子树的节点中,在层序历遍中最靠前的节点。
序前+后序
这个组合是没法重建定确的二叉树的。
对于满二叉树,利用子树节点的排列序顺能区开分阁下子树节点集合,构建是没有问题的。但一旦有单个叶子的节点存在,则没法定确叶子是左儿子还是右儿子。因为无论是序前还是后序序列,都没法表现单个儿子况情下,儿子的位置。序前会将阁下子树的点置于节点以后,后序则是将阁下子树的点置于节点之前。
举个简略的反例:
给出如下的序前序列和后序序列: preorder: A, B; postorder: B, A
能构建的二叉树有两种可能,1.A是根节点,B是A左儿子; 2.A是根节点, B是A的右儿子。没法失掉一个独一的结果。
序前+层序
这个组合也是没法重建定确的二叉树的。一样于后序+层序的况情。
理道跟(序前+后序)的理道一样,无论是序前、后序,还是层序,都是没法定确单个儿子节点况情下儿子节点的序顺。
结总
中序历遍配合另外任何一个历遍,能重建二叉树。其他的恣意两个序列的组合都不能独一的定确重建的二叉树。
PS:
欢送拜访新博客,这里有更好的排版哦 ; ) 点击打开链接
文章结束给大家分享下程序员的一些笑话语录:
问答
Q:你是怎么区分一个内向的程序员和一个外向的程序员的? A:外向的程序员会看着你的鞋和你说话时。
Q:为什么程序员不能区分万圣节和圣诞节? A:这是因为 Oct 31 == Dec 25!(八进制的 31==十进制的 25)
相关文章推荐
- 根据前中后序和层序重建二叉树(PAT1020、PAT1043)
- 根据前中后序和层序重建二叉树(PAT1020、PAT1043)
- 根据前中后序和层序重建二叉树
- 根据前序和中序列 重建二叉树
- 剑指:根据输入的前序和中续遍历序列重建二叉树
- 根据前序和中序序列重建二叉树
- 根据前序和中序的遍历序列重建二叉树
- 根据前序和中序序列重建二叉树 Construct Binary Tree from Preorder and Inorder Traversal
- 根据前序遍历序列和中序遍历序列重建二叉树
- 根据前序中序序列重建二叉树
- 根据中序和后序序列重建二叉树 Construct Binary Tree from Inorder and Postorder Traversal
- (二叉搜索树10.1.2)POJ 1577 Falling Leaves(根据删除叶子节点的顺序输出计算一颗二叉树的前序遍历序列)
- 根据先序序列和中序序列重建二叉树
- 根据二叉树的前序中序遍历序列重建二叉树
- 根据先序和中序序列重建二叉树
- 根据先序遍历序列和中序遍历序列重建二叉树
- 根据二叉树的前序和中序序列来重建二叉树
- 根据前序遍历(或者是后序遍历)和中序遍历得到的序列可以重建二叉树
- 笔试算法题(36):寻找一棵二叉树中最远节点的距离 & 根据二叉树的前序和后序遍历重建二叉树
- [LeetCode] 根据前序序列和中序序列重建二叉树