python构造一个二叉树_Python构建一个二叉树测试用例——返回根节点,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]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值