已知二叉树的两种遍历求第三种遍历。
已知前序和中序求后序,已知后序和中序求前序,这两种解法网上有很多,但是已知前序和后序求中序的解法我没找到,这里写一个自己的想法,有可能大家已经想到了我没有搜索到而已
首先,我们看看前序、中序、后序遍历的特性:
前序遍历:
1.访问根节点
2.前序遍历左子树
3.前序遍历右子树
中序遍历:
1.中序遍历左子树
2.访问根节点
3.中序遍历右子树
后序遍历:
1.后序遍历左子树
2.后序遍历右子树
3.访问根节点
思路:把后序的遍历结果做一下颠倒,那么结果就是
1.访问根节点
2.后序遍历右子树
3.后序遍历左子树
根据这个结果和前序结果比较求出结果。
例如:一个已知二叉树的前序遍历为:abdghcef,后序遍历为:ghdbefca 求中序遍历的结果.
解法:将后序的遍历结果颠倒过来就是acfebdhg
我们把前序遍历的结果命名(1):abdghcef 颠倒过来的命名为(2):acfebdhg
1.很明显根节点是a,
2.从(1)的结果看a紧跟着的是b开头的左子树
3.从(2)的结果看a后面紧跟着的是c开头的右子树
那么属于左子树的应该为bdgh 属于右子树的应该是cfe
我们又有左子树的前序遍历(3):bdgh 颠倒的遍历(4):bdhg
重复上面的步骤可以继续拆分为更小的单位。
当然结果有时候不唯一,这是已知条件决定的。
作者:crimson_pig
出处:http://blog.csdn.net/crimson_pig/article/details/78568500
本文版权归作者所有,未经许可不得转载,否则保留追究法律责任的权利。