python构建二叉树测试用例–返回根节点

  • Post author:
  • Post category:python



python构建二叉树测试用例–返回根节点

# 定义树节点.
class TreeNode(object):
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None
        
#将输入的列表转化为一棵二叉树,返回根节点
def deserialize(data):
    def dfs(data):
        val = data.pop(0)
        if val == 'null':
            return None

        node = TreeNode(val)
        node.left = dfs(data)
        node.right = dfs(data)
        return node
    return dfs(data)
# 中序遍历:
def inOrder(root):
    if not root:
        return []
    return  inOrder(root.left) +[root.val]+ inOrder(root.right)

# 前序遍历:
def preOrder(root):
    if not root:
        return []
    return [root.val] + preOrder(root.left) + preOrder(root.right)

构造如下二叉树

     4
   /    \
  2   	 7
 / \   	 / \
1   3   5   8
#可认为最后还有有8个null叶子结点,在以下第二种方法中需要时使用


第一种:

#测试1:全部手动配置左右结点,比较繁琐
nodelist=[TreeNode(i)for i in [4,2,7,1,3,5,8]]
nodelist[0].left=nodelist[1]
nodelist[0].right=nodelist[2]
nodelist[1].left=nodelist[3]
nodelist[1].right=nodelist[4]
nodelist[2].left=nodelist[5]
nodelist[2].right=nodelist[6]
root = nodelist[0]
print('二叉树根节点为:',root)
print('前序遍历',preOrder(root))
print('前序遍历',inOrder(root))

二叉树根节点为: <

main

.TreeNode object at 0x000001EF18D21668>

前序遍历 [4, 2, 1, 3, 7, 5, 8]

前序遍历 [1, 2, 3, 4, 5, 7, 8]


第二种:

#测试2:调用以上deserialize函数,给定的列表需要包含所有的null的叶子结点
data = [4, 2, 1, 'null', 'null', 3, 'null','null', 7, 5, 'null', 'null', 8, 'null', 'null']
root = deserialize(data)
print('二叉树根节点为:',root)
print('前序遍历',preOrder(root))
print('前序遍历',inOrder(root))

输出:

二叉树根节点为: <

main

.TreeNode object at 0x000001EF18D21160>

前序遍历 [4, 2, 1, 3, 7, 5, 8]

前序遍历 [1, 2, 3, 4, 5, 7, 8]


第三种:

# 测试3:直接通过已有的树的结点来定义
root = TreeNode(4, TreeNode(2, TreeNode(1),TreeNode(3)),TreeNode(7,TreeNode(5),TreeNode(8)))
print('二叉树根节点为:',root)
print('前序遍历',preOrder(root))
print('前序遍历',inOrder(root))

输出:

二叉树根节点为: <

main

.TreeNode object at 0x000001EF18D01B70>

前序遍历 [4, 2, 1, 3, 7, 5, 8]

前序遍历 [1, 2, 3, 4, 5, 7, 8]



版权声明:本文为qq_28757173原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。