Python用孩子链存储结构创建一棵树,算出树的高度,实现层次遍历,先序遍历,后序遍历
时间: 2023-06-08 08:07:05 浏览: 96
好的,我会尽力回答你的问题。关于你的问题,我可以给你提供一些思路和代码实现的参考。
首先,我们需要了解孩子链存储结构。孩子链存储结构是一种树的存储方式,它将每个节点的孩子节点按照链表的方式存储起来。这种存储方式常用于树的遍历操作。
接下来,我们可以使用Python来创建一棵树,并算出树的高度。具体实现如下:
```python
class TreeNode:
def __init__(self, val=None):
self.val = val
self.child = []
def create_tree():
# 以列表的形式输入一棵树
# 如 [1,[2,3],4,[5,6,[7,[8]]]]
data = input()
if data == "[]":
return None
if isinstance(data, int):
return TreeNode(data)
root = TreeNode()
stack = []
p = root
i = 0
while i < len(data):
if data[i] == "[":
stack.append(p)
i += 1
elif data[i] == "]":
stack.pop()
i += 1
else:
j = i
while j < len(data) and data[j].isdigit():
j += 1
val = int(data[i:j])
i = j
node = TreeNode(val)
if not p:
p = stack[-1]
p.child.append(node)
p = None
else:
p.child.append(node)
p = node
return root
def get_height(root):
if not root:
return 0
height = 0
for c in root.child:
height = max(height, get_height(c))
return height + 1
# 测试
# 输入树的方式为 [1,[2,3],4,[5,6,[7,[8]]]]
root = create_tree()
print("树的高度为:", get_height(root))
```
上述代码实现了输入一棵树,并输出树的高度。输入树的方式为:以列表的形式输入,其中每个数代表一个节点,如果一个数是列表,则表示这个节点有多个孩子节点。
接下来,我们可以使用Python实现层次遍历、先序遍历、后序遍历。具体实现如下:
```python
def level_order(root):
if not root:
return []
queue = [root]
res = []
while queue:
node = queue.pop(0)
res.append(node.val)
queue.extend(node.child)
return res
def preorder(root):
if not root:
return []
res = [root.val]
for c in root.child:
res.extend(preorder(c))
return res
def postorder(root):
if not root:
return []
res = []
for c in root.child:
res.extend(postorder(c))
res.append(root.val)
return res
# 测试
# 输入树的方式为 [1,[2,3],4,[5,6,[7,[8]]]]
root = create_tree()
print("层次遍历结果为:", level_order(root))
print("先序遍历结果为:", preorder(root))
print("后序遍历结果为:", postorder(root))
```
上述代码实现了树的层次遍历、先序遍历、后序遍历。其中,层次遍历采用广度优先搜索的方式实现,先序遍历和后序遍历则采用递归的方式实现。
希望以上内容能够帮助到你。如果还有其他问题,请继续提问,我会尽力回答。
阅读全文