python 判断平衡二叉树后序遍历_判断平衡二叉树——Python

给定一棵二叉树,判断它是否为平衡二叉树。

平衡二叉树的定义是:如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。

拿到二叉树的题目,一般的解题思路都可以先从左右子树递归求解。如果左子树不满足平衡或右子树不满足平衡,那么就判断它不是平衡的。

具体看代码:

# Definition for a binary tree node.

# class TreeNode:

# def __init__(self, x):

# self.val = x

# self.left = None

# self.right = None

class Solution:

def isBalanced(self, root) :

def recur(root):

# 树为空,也是平衡二叉树

if not root:

return 0

# 查看左子树

left = recur(root.left)

# 左子树非平衡,直接返回非平衡的结论

if left == -1:

return -1

# 查看右子树

right = recur(root.right)

# 右子树非平衡,直接返回非平衡的结论

if right == -1:

return -1

# 如果左右子树均是平衡的,那么返回它们深度的最大值并加1

# 表示对应结点的深度

# 如果左右子树的深度相差大于1, 那么当前结点是非平衡的

# 总体来看,整棵树也是非平衡的

return max(left, right) + 1 if abs(left-right) <= 1 else -1

return recur(root) != -1

时间复杂度和空间复杂度均是O(N),因为要查看所有的结点。

### 回答1: 后序遍历二叉树的算法代码如下:def postOrder(root): if root: postOrder(root.left) postOrder(root.right) print(root.data) ### 回答2: 二叉树后序遍历算法代码如下: ```python class Node: def __init__(self, value): self.val = value self.left = None self.right = None def postorder_traversal(root): if root is None: return # 递归遍历左子树 if root.left: postorder_traversal(root.left) # 递归遍历右子树 if root.right: postorder_traversal(root.right) # 输出当前节点的值 print(root.val, end=" ") # 测试代码 # 创建二叉树 root = Node(1) root.left = Node(2) root.right = Node(3) root.left.left = Node(4) root.left.right = Node(5) print("后序遍历结果为:") postorder_traversal(root) ``` 通过以上代码,我们定义了一个`Node`类,该类表示二叉树中的节点。每个节点都有一个值属性`val`和左右子节点属性`left`和`right`。然后,我们定义了一个`postorder_traversal`函数来实现二叉树的后序遍历。 在后序遍历算法中,首先递归遍历左子树,然后递归遍历右子树,最后输出当前节点的值。我们通过递归调用来遍历子树,直到叶子节点为止。 最后,我们通过创建一个测试二叉树并调用`postorder_traversal`函数来进行后序遍历,输出结果为每个节点的值。 ### 回答3: 二叉树后序遍历的算法代码如下: ``` class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right def postorderTraversal(root): result = [] # 用于存储遍历结果的数组 def post_order(node): if node: # 节点不为空 post_order(node.left) # 递归遍历左子树 post_order(node.right) # 递归遍历右子树 result.append(node.val) # 将节点值添加到遍历结果中 post_order(root) # 从根节点开始后序遍历 return result # 测试用例 # 创建二叉树 root = TreeNode(1) root.left = TreeNode(2) root.right = TreeNode(3) root.left.left = TreeNode(4) root.left.right = TreeNode(5) root.right.left = TreeNode(6) root.right.right = TreeNode(7) print(postorderTraversal(root)) # 输出遍历结果:[4, 5, 2, 6, 7, 3, 1] ``` 这个算法使用递归实现了二叉树的后序遍历。首先创建一个空数组result用于存储遍历结果。然后定义了一个内部函数post_order,该函数用于实现节点的后序遍历。在post_order函数中,首先递归遍历左子树,然后递归遍历右子树,最后将节点的值添加到result数组中。最后调用post_order函数,从根节点开始后序遍历二叉树,并返回结果数组result。 在给定的测试用例中,创建了一个如下图所示的二叉树: ``` 1 / \ 2 3 / \ / \ 4 5 6 7 ``` 对该二叉树进行后序遍历后,输出的结果为:[4, 5, 2, 6, 7, 3, 1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值