• chpa02_用分治法构造二叉树


    算法思路:

    1. 给出先序,中序序列(两个序列中的值不应该有重复)
    2. 先序序列的第一个符号就是树的根
    3. 根据先序序列中根的值在中序序列中找到根所在节点的下标
    4. 根据下标将先序序列和中序序列分别都分解成两个子序列(这里要注意分解的方式,下面的实现中用了值传递的方式)
    5. 根据上面分得的子序列分别用递归的方式构造左右子树(这里就包含了分治的思想)

    算法实现(Python):

    # encoding:utf-8
    '''
    python 3.3 Created on 2012-6-8 ''' #=============================================================================== # 树的节点 #=============================================================================== class Node: def __init__(self): self.data = None self.left = None self.right = None #=============================================================================== #给定数的两个序列,一个先序序列,一个中序序列 #用分治的方法构造一棵树 #=============================================================================== def CreateTree(pre, mid): root = Node() l = len(pre) if l == 0: root = None return root if l == 1: root.data = pre[0] root.left = None root.right = None return root if l > 1: i = mid.index(pre[0]) root.data = pre[0] root.left = CreateTree(pre[1:i+1], mid[0:i]) root.right = CreateTree(pre[i+1:l], mid[i+1:l]) return root #=============================================================================== # 后序遍历二叉树 #=============================================================================== def Treversal(root): if root is not None: Treversal(root.left) Treversal(root.right) print(root.data, end="") preStr = "ABHDGCEF" # 先序序列 midStr = "HBGDAECF" # 中序序列 aftStr = "HGDBEFCA" # 后序序列 root = CreateTree(preStr, midStr) Treversal(root) # 用于验证是否正确

  • 相关阅读:
    bzoj1914
    bzoj3144
    bzoj2756
    poj3177
    一些比较水的题目
    bzoj2282
    屯题50AC纪念
    Base64解码中文部分中文乱码的原因
    随机生成36位字符串
    jQuery判断某个元素是否存在某个样式
  • 原文地址:https://www.cnblogs.com/wangshide/p/2542756.html
Copyright © 2020-2023  润新知