本文主要是介绍二叉树展开为列表(LeetCode),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目
给你二叉树的根结点
root
,请你将它展开为一个单链表:
- 展开后的单链表应该同样使用
TreeNode
,其中right
子指针指向链表中下一个结点,而左子指针始终为null
。- 展开后的单链表应该与二叉树 先序遍历 顺序相同。
解题
class TreeNode:def __init__(self, val=0, left=None, right=None):self.val = valself.left = leftself.right = rightdef build_tree(nodes, index=0):if index >= len(nodes) or nodes[index] is None:return Noneroot = TreeNode(nodes[index])root.left = build_tree(nodes, 2 * index + 1)root.right = build_tree(nodes, 2 * index + 2)return rootdef flatten(root):# 使用前序遍历展开二叉树if not root:returnstack = [root]prev = Nonewhile stack:curr = stack.pop()if prev:prev.right = currprev.left = Noneif curr.right:stack.append(curr.right)if curr.left:stack.append(curr.left)prev = curr# 转换为符合题目要求的列表形式flattened_list = []while root:flattened_list.append(root.val)root = root.rightif root:flattened_list.append(None)return flattened_list# 测试
nodes = [1, 2, 5, 3, 4, None, 6]
root = build_tree(nodes)
flattened_list = flatten(root)
print(flattened_list) # 输出:[1, None, 2, None, 3, None, 4, None, 5, None, 6]
这篇关于二叉树展开为列表(LeetCode)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!