获取二叉树性质相关

树的结构为

public class TreeNode {
    public int val;
    public TreeNode left;
    public TreeNode right;
    public TreeNode(int x) 
    { 
        val = x; 
    }
}

二叉树中叶子节点的个数

叶子指没有两个孩子的节点。递归的方法是,一个节点下的叶子节点数目等于其左子树和右子树叶子节点数目之和

public int leavesNum(TreeNode root) {
    if(root == null) return 0;
    else if(root.left == null && root.right == null) return 1;
    else return leavesNum(root.left)+leavesNum(root.right);
}

二叉树第K层节点数目

从根结点向下第k层的节点数,应该等于根左右孩子向下k-1层的节点数之和。递归不断向下。

public int nodesNum(TreeNode root, int k) {
    if(root == null) return 0;
    if(k == 1) return 1;
    return nodesNum(root.left, k-1) + nodesNum(root.right, k-1);
}

二叉树最大高度

https://leetcode.com/problems/maximum-depth-of-binary-tree/
Given a binary tree, find its maximum depth.
The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node.

最大高度就是指树的高度:树的高度应该为其左子树和右子树的最大高度+1

public int maxDepth(TreeNode root) {
    if(root == null) return 0;
    else{
        int leftmax = maxDepth(root.left), rightmax = maxDepth(root.right);
        return leftmax > rightmax ? (leftmax+1) : (rightmax+1);
    }
}

二叉树最小高度

https://leetcode.com/problems/minimum-depth-of-binary-tree/
Given a binary tree, find its minimum depth.
The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node

二叉树最小高度并不仅仅是上一道题的相反逻辑,注意,最大高度直接递归可以保证是从根到叶子节点,但是最小高度用这种逻辑递归并不能保证是到叶子节点(可能会是从根到某个只有一个孩子的节点)

public int minDepth(TreeNode root) {
    if(root == null) return 0;
    else{
        int leftmin = minDepth(root.left), rightmin = minDepth(root.right);
        if(leftmin == 0) return rightmin+1;
        if(rightmin == 0) return leftmin+1;
        else return leftmin < rightmin ? leftmin+1 : rightmin+1;
    }   
}
### 头歌平台中关于二叉树性质相关教学内容 #### 二叉树的基本定义与特性 二叉树是一种特殊的树形结构,其中每个节点至多拥有两个子节点,并且明确区分左右子树。即使某个节点只有一个子节点,也需要指明它是左子树还是右子树[^1]。这种严格的区分使得二叉树具备独特的性质。 #### 二叉树的关键性质 以下是二叉树的一些重要性质: - **性质1**:对于任何一棵非空二叉树,叶子节点的数量 \( n_0 \) 等于具有两个孩子的节点数量 \( n_2 \) 加上 1,即 \( n_0 = n_2 + 1 \)[^1]。 - **性质2**:如果二叉树的高度为 \( h \),则最少包含 \( h \) 个节点,最多包含 \( 2^h - 1 \) 个节点[^1]。 - **性质3**:满二叉树是指除了最后一层外,每一层上的所有节点都有两个子节点的二叉树。完全二叉树则是除最后一层外,其他层都是满的,并且最后一层的节点都集中在最左边[^1]。 #### 存储结构与遍历方法 在头歌平台上,学习者通常会接触到两种主要的存储方式以及三种常见的遍历方法: - **存储结构** 常见的是数组存储和链表存储(如二叉链表)。数组适合表示完全二叉树,而链表更适合一般情况下的二叉树[^3]。 - **遍历方法** - **先序遍历**:访问顺序为根节点 -> 左子树 -> 右子树[^2]。 - **中序遍历**:访问顺序为左子树 -> 根节点 -> 右子树。通过中序遍历的结果可以清晰地区分左右子树的内容[^3]。 - **后序遍历**:访问顺序为左子树 -> 右子树 -> 根节点[^2]。 这些遍历方法不仅有助于理解二叉树结构,还能够帮助解决许多实际问题,比如表达式的解析、查找特定路径等。 #### 实际应用场景 头歌的教学内容强调理论联系实践的重要性。例如,在实现二叉树的过程中,学生会被要求完成如下任务: - 构建给定输入数据的二叉树; - 使用递归函数实现各种遍历操作; - 解决基于二叉树的实际问题,如判断两棵树是否相同、计算最大深度等[^2]。 以下是一个简单的代码示例展示如何构建并进行中序遍历: ```python class TreeNode: def __init__(self, value=0, left=None, right=None): self.value = value self.left = left self.right = right def inorder_traversal(root): result = [] if root is not None: result += inorder_traversal(root.left) result.append(root.value) result += inorder_traversal(root.right) return result # 测试用例 root = TreeNode(1) root.left = TreeNode(2) root.right = TreeNode(3) root.left.left = TreeNode(4) print(inorder_traversal(root)) # 输出应为 [4, 2, 1, 3] ``` 此代码片段展示了如何创建一个简单的二叉树并通过中序遍历来获取其节点值列表。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值