二叉链实现二叉树先序中序后序遍历操作
时间: 2023-11-24 21:07:23 浏览: 91
二叉链实现二叉树先序中序后序遍历操作的具体步骤如下:
1. 定义二叉树节点类,包含节点值、左右子节点等属性。
2. 根据输入的前序序列和中序序列构建二叉树。具体步骤如下:
1. 前序序列的第一个元素为根节点,将其在中序序列中找到对应位置,左边为左子树的中序序列,右边为右子树的中序序列。
2. 根据左子树的中序序列长度,在前序序列中找到左子树的前序序列,右边为右子树的前序序列。
3. 递归构建左子树和右子树。
3. 实现先序遍历、中序遍历和后序遍历函数。具体步骤如下:
1. 先序遍历:先输出当前节点的值,再递归遍历左子树和右子树。
2. 中序遍历:先递归遍历左子树,再输出当前节点的值,最后递归遍历右子树。
3. 后序遍历:先递归遍历左子树和右子树,最后输出当前节点的值。
4. 统计二叉树的叶子数。具体步骤如下:
1. 如果当前节点为空,则返回0。
2. 如果当前节点为叶子节点,则返回1。
3. 否则,递归统计左子树和右子树的叶子数,并将它们相加。
下面是Python代码实现:
```python
class TreeNode:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
def buildTree(preorder, inorder):
if not preorder or not inorder:
return None
root_val = preorder[0]
root = TreeNode(root_val)
root_index = inorder.index(root_val)
root.left = buildTree(preorder[1:root_index+1], inorder[:root_index])
root.right = buildTree(preorder[root_index+1:], inorder[root_index+1:])
return root
def preorderTraversal(root):
if not root:
return []
res = []
res.append(root.val)
res += preorderTraversal(root.left)
res += preorderTraversal(root.right)
return res
def inorderTraversal(root):
if not root:
return []
res = []
res += inorderTraversal(root.left)
res.append(root.val)
res += inorderTraversal(root.right)
return res
def postorderTraversal(root):
if not root:
return []
res = []
res += postorderTraversal(root.left)
res += postorderTraversal(root.right)
res.append(root.val)
return res
def countLeaves(root):
if not root:
return 0
if not root.left and not root.right:
return 1
return countLeaves(root.left) + countLeaves(root.right)
# 示例
preorder = [1, 2, 4, 5, 3, 6, 7]
inorder = [4, 2, 5, 1, 6, 3, 7]
root = buildTree(preorder, inorder)
print("先序遍历:", preorderTraversal(root))
print("中序遍历:", inorderTraversal(root))
print("后序遍历:", postorderTraversal(root))
print("叶子数:", countLeaves(root))
--相关问题--:
阅读全文