二叉树顺序存储转二叉链表存储代码
时间: 2024-10-25 18:15:45 浏览: 23
将二叉树转换成二叉链表的一种常见方法是使用前序遍历的思想,因为前序遍历的第一个元素就是根节点,可以作为链表的头节点。下面是一个简单的Python示例,假设我们有一个数组`nodes`表示二叉树的节点值:
```python
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def array_to_linked_list(nodes):
if not nodes:
return None
dummy = TreeNode(0) # 创建虚拟头节点
current = dummy
stack = [nodes.pop(0)] # 先入栈根节点
while nodes and stack:
node = stack.pop()
current.right = node # 将当前节点的右孩子设置为下一个节点
current = current.right # 更新current指向当前节点的右孩子
if node.left in nodes: # 如果左孩子还在数组中
stack.append(node.left) # 入栈左孩子
if node.right in nodes: # 如果右孩子还在数组中
stack.append(node.right) # 入栈右孩子
return dummy.right # 返回实际的头节点,即原二叉链表的根节点
# 使用示例
nodes = [1, 2, 3, 4, 5, 6, 7]
root = array_to_linked_list(nodes)
```
这个函数首先创建一个虚拟头节点,然后通过不断地从栈中取出节点并将其连接到前一个节点的右侧,同时判断左右子节点是否仍在数组中,直到遍历完所有节点。最后返回虚拟头节点的`right`属性,得到的就是二叉链表。
阅读全文