二叉树知道前序中序或者中序后序求另外一个排列
来源:互联网 发布:考研网络班 编辑:程序博客网 时间:2024/06/05 07:13
二叉树的遍历:
前序遍历:根节点->左子树->右子树
中序遍历:左子树->根节点->右子树
后序遍历:左子树->右子树->根节点
求下面树的三种遍历:
详细的二叉树的操作可以看一下我之前写的文章前序遍历:abdefgc
中序遍历:debgfac
后序遍历:edgfbca
二叉树java
已知前序、中序遍历,求后序遍历
前序遍历的第一个值就是根节点,然后再中序遍历中找到这个值,那么这个值的左边部分即为当前二叉树的左子树部分前序遍历结果,这个值的右边部分即为当前二叉树的右子树部分前序遍历结果。
如上图:前序a为根节点,再看中序里面的a,由于中序是(左根右),所以a的左边debgf为左子树,右边c为右子树
所以递归调用左子树:左子树的前序遍历中序遍历为:bdefg、debgf
再递归调用右子树:c、c
递归的过程:
1 确定根,确定左子树,确定右子树。
2 在左子树中递归。
3 在右子树中递归。
4 打印当前根。
已知中序、后序,求前序遍历后序遍历最后一个结点即为根结点
递归的过程:
1 确定根,确定左子树,确定右子树。
2 在左子树中递归。
3 在右子树中递归。
4 打印当前根。
如果是在线笔试的话直接使用下面的代码,非常好用
#-*- coding: utf-8 -*-#!/usr/bin/python#Filename: BTreeNode.py'''Created on 2011-4-11@author: boyce@contact: boyce.ywr@gmail.com@version: 1.0'''class BTree: ''' Represent a no in a binary tree. ''' def __init__(self, c='/0', l=None, r=None): ''' Initializes the node's data ''' self.e = c self.left = l self.right = rdef preorderTraverse(bt): ''' 返回前序遍历结果 ''' if bt: return '%s%s%s' % (bt.e, preorderTraverse(bt.left), preorderTraverse(bt.right)) return ''def inorderTraverse(bt): ''' 返回中序遍历结果 ''' if bt: return '%s%s%s' % (inorderTraverse(bt.left), bt.e, inorderTraverse(bt.right)) return '';def postorderTraverse(bt): ''' 返回后序遍历结果 ''' if bt: return '%s%s%s' % (postorderTraverse(bt.left), postorderTraverse(bt.right), bt.e) return ''def printBTree(bt, depth): ''' 递归打印这棵二叉树,*号表示该节点为NULL ''' ''' if not bt: ch = '*' else: ch = bt.e ''' #ch=(lambda x: (x and x.e) or '*')(bt) ch = bt.e if bt else '*' if(depth > 0): print '%s%s%s' % ((depth - 1) * ' ', '--', ch) else: print ch if not bt: return printBTree(bt.left, depth + 1) printBTree(bt.right, depth + 1)def buildBTreeFromPreIn(preo, ino): ''' 根据前序和中序遍历结果重构这棵二叉树 ''' if(preo == '' or ino == ''): return None pos = ino.find(preo[0]) if(pos < 0): return None return BTree(preo[0], buildBTreeFromPreIn(preo[1:pos + 1], ino[0:pos]), buildBTreeFromPreIn(preo[pos + 1:], ino[pos + 1:])) #return nddef buildBTreeFromInPost(ino, po): ''' 根据中序和后序遍历结果重构这棵二叉树 ''' if(ino == '' or po == ''): return None pos = ino.find(po[-1]) if(pos < 0): return None return BTree(po[-1], buildBTreeFromInPost(ino[0:pos], po[0:pos]), buildBTreeFromInPost(ino[pos + 1:], po[pos:-1])) if __name__ == '__main__': preo = 'ABDGCEFH' ino = 'DGBAECHF' po = 'GDBEHFCA' bt = buildBTreeFromPreIn(preo, ino) print 'Build from preorder & inorder' print 'Preorder: %s' % (preorderTraverse(bt)) print 'Inorder: %s' % (inorderTraverse(bt)) print 'Postorder: %s' % (postorderTraverse(bt)) print 'The BTree is (* means no such a node):' printBTree(bt, 0) bt = buildBTreeFromInPost(ino, po) print 'Build from inorder & postorder' print 'Preorder: %s' % (preorderTraverse(bt)) print 'Inorder: %s' % (inorderTraverse(bt)) print 'Postorder: %s' % (postorderTraverse(bt)) print 'The BTree is (* means no such a node):' printBTree(bt, 0)
http://blog.csdn.net/hinyunsin/article/details/6316185
0 0
- 二叉树知道前序中序或者中序后序求另外一个排列
- 二叉树的排列
- 重建二叉树--已知一个二叉树的前、中序排列,重建出该二叉树。
- 【笔试】58、确定其中一个字符串的字符重新排列后,能否变成另外一个字符串
- 在一个字符串中查找另外一个字符串的全排列出现位置
- FLEX:一个页面包含(或者说是引用)另外一个页面
- 关于一个程序调用另外一个程序或者传值的小问题
- 判断一个字符串是否与另外一个字符串左旋或者右旋之后相等
- 给定一个有序的链表或者数组,构造一棵二叉搜索树
- 给定一个有序数组,元素各不相同且升序排列,创建一个高度最小的二叉查找树
- 将目标文件的一部分或者全部内容拷贝到另外一个目标文件中 objcopy
- Jquery mobile 提交表单转换到另外一个页面或者留在本页面的方案!
- 用PHP怎么调用另外一个站下的txt或者HTML文件
- 阿里云 新域名跳转到另外一个域名(一级或者二级)地址
- javasript dom 中获取元素类名 或者 改变类 引用另外一个类
- 关于重建二叉树问题已经二叉树前序排列和中序排列求二叉树
- 二叉树的重构(知道前序中序)
- windows下知道机器名或IP的查询另外一个信息的方法
- 从简单实例开始,学会写Makefile(一)
- Shoot - HDR合成
- POJ-3579
- java一些面试题
- MIT-BIH ECG 心电数据的下载和读取图解
- 二叉树知道前序中序或者中序后序求另外一个排列
- Cocos2d-x学习笔记(二)-------->CCDirector导演类
- ACM_UVA1586
- Untrusted Patrol
- Windows8 上面安装Oracle 11g 时,安装程序报错:[INS-13001]环境不满足最低要求
- 图片剪裁
- linux磁盘占用100%的解决方法
- main(int argc,char* argv[],char *envp[] )
- 详解Oracle DELETE和TRUNCATE 的区别