python之如何快速的判断二叉树的排序方式

本文分享了在解决Python二叉树排序问题时,如何通过前序、中序、后序遍历判断二叉树结构的方法,重点介绍了通过排除法确定根节点和子树的策略,帮助读者高效解题。
摘要由CSDN通过智能技术生成

最近在python的二级的题库里面苦苦挣扎,在做选择题的时候遇到二叉树的排序问题,只能蒙,靠运气做对,前几天就疯狂查找资料,希望能够找到合适的方式,可以做对,又不会花费太多的时间。终于,在我苦苦的努力下,摸索出来了一点方法,想和大家分享一下😁
题一
在这里插入图片描述
首先我们要清楚二叉树的前序,中序,后序序列的遍历方式
前序:根结点(叶子结点,度为0的点)-左子树结点-右子树结点
中序:左-根-右
后序:左-右-根(为了方便记忆,我就简写)
我们看题目中说后序遍历和前序遍历相同,都是ABCDEF,根据上面的规则,我们可以知道它的左子树节点为开头为A,具体多少我们先不论。
然后我们再来看,树结点,树结点在我查资料来看就是顶端一个点,举个例子

在这里插入图片描述上图A表示的就是树节点。
那么回到题目,要满足中序序列和后序序列相同,只能是没有右子树结点的情况,因此F为树节点。
根据排除法我们就可以得出答案为A了。
题二
在这里插入图片描述
根据上述的方法,我们可以判断出

判断一棵二叉树是否为平衡二叉树可以采用递归的方式。对于每个节点,我们可以计算其左右子树的高度差,如果高度差大于1,则该二叉树不是平衡二叉树,否则递归判断其左右子树是否是平衡二叉树。在递归时,可以同时判断二叉树是否为二叉排序树,即左子树的所有节点值都小于当前节点的值,右子树的所有节点值都大于当前节点的值。 下面是递归判断平衡二叉树排序树的代码实现: ```python class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right class Solution: def isBalanced(self, root: TreeNode) -> bool: if not root: return True left_height = self.get_height(root.left) right_height = self.get_height(root.right) if abs(left_height - right_height) > 1: return False return self.isBalanced(root.left) and self.isBalanced(root.right) and self.isBST(root.left, float('-inf'), root.val) and self.isBST(root.right, root.val, float('inf')) def get_height(self, node: TreeNode) -> int: if not node: return 0 return max(self.get_height(node.left), self.get_height(node.right)) + 1 def isBST(self, node: TreeNode, min_val: float, max_val: float) -> bool: if not node: return True if node.val <= min_val or node.val >= max_val: return False return self.isBST(node.left, min_val, node.val) and self.isBST(node.right, node.val, max_val) ``` 其中,`get_height`函数用于计算二叉树的高度,`isBST`函数用于判断是否为二叉排序树。`isBalanced`函数是递归判断平衡二叉树的主函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值