【LeetCode】513. Find Bottom Left Tree Value-查找二叉树最左下角元素

一、描述:

二、思路:

使用队列Queue按序(从左至右)存储每一层的结点,若不是最后一层,则在添加完下一层全部结点后,将上一层结点全部移除,直到最后一层,此时获取队首结点,即为所求;

如何判断当前层是不是最后一层,可以通过二叉树的深度来控制;

故该思路需要两个方法,方法一获取深度,方法二进行每一层结点的压入和移除,用到BFS。

注:代码略长,只是第一次想到的解法

三、代码:

 1 /**
 2  * Definition for a binary tree node.
 3  * public class TreeNode {
 4  *     int val;
 5  *     TreeNode left;
 6  *     TreeNode right;
 7  *     TreeNode(int x) { val = x; }
 8  * }
 9  */
10 public class Solution {
11     public int findBottomLeftValue(TreeNode root) {
12         Queue<TreeNode> queue = new LinkedList<TreeNode>();
13         int depth = depth(root);//获得二叉树深度
14         queue.offer(root);//压入首结点
15         while(depth>1){
16             int size = queue.size();//当前Queue中结点个数
17             for(int i=0;i<size;i++){
18                 TreeNode node = queue.remove();//若不是最后一层,则循环移除Queue中的上一层结点
19                 if(node.left!=null){
20                     queue.offer(node.left);
21                 }
22                 if(node.right!=null){
23                     queue.offer(node.right);
24                 }
25             }
26             depth--;
27         }
28         TreeNode result = queue.peek();
29         if(result!=null){
30             return result.val;
31         }
32         return 0;
33     }
34     
35     //求二叉树深度
36     public int depth(TreeNode root){
37         if(root==null){
38             return 0;
39         }
40         if(root.left==null && root.right==null){
41             return 1;
42         }
43         int left = depth(root.left);
44         int right = depth(root.right);
45         return  left<right?right+1:left+1;
46     }
47 }

 

<think>我们正在讨论的是二叉树节点类的定义。在Python中,我们通常使用类来定义二叉树的节点。给定的代码片段是一个典型的二叉树节点类的注释版本。 代码解释如下: ```python # Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right ``` 这段代码定义了一个名为`TreeNode`的类,它代表二叉树中的一个节点。每个节点包含三个属性: 1. `val`:存储节点的,默认为0。 2. `left`:指向左子节点的引用,默认为`None`(表示没有左子节点)。 3. `right`:指向右子节点的引用,默认为`None`(表示没有右子节点)。 `__init__`方法是类的构造函数,在创建类的新实例(即节点对象)时被调用。它接受三个参数: - `self`:代表当前对象的实例。 - `val`:节点的,默认为0。 - `left`:左子节点,默认为`None`。 - `right`:右子节点,默认为`None`。 当创建一个`TreeNode`对象时,我们可以指定节点的以及左右子节点。例如: - 创建一个为1,且没有子节点的节点:`node = TreeNode(1)` - 创建一个为2,左子节点为`left_node`,右子节点为`right_node`的节点:`node = TreeNode(2, left_node, right_node)` 在二叉树的算法题中,这种节点定义非常常见,它提供了构建二叉树的基础结构。 现在,根据指令,我们需要生成相关问题。由于用户的问题是关于二叉树节点类定义的,我们可以围绕二叉树的基本概念、操作以及相关算法来生成问题。 §§相关问题§§ 1. 二叉树有哪些常见的遍历方式? 2. 如何实现二叉树的深度优先搜索(DFS)? 3. 如何实现二叉树的广度优先搜索(BFS)? 4. 二叉树的前序、中序、后序遍历有什么区别? 5. 二叉树和二叉搜索有什么区别? </think>### Python二叉树节点类定义解析 在Python中,二叉树节点类的定义提供了二叉树数据结构的基础构建单元。以下是对注释代码的详细解释: ```python # Definition for a binary tree node. # 二叉树节点类的定义标准 # class TreeNode: # 声明名为TreeNode的类 # def __init__(self, val=0, left=None, right=None): # 构造函数 # self.val = val # 节点存储的(默认0) # self.left = left # 左子节点指针(默认空) # self.right = right # 右子节点指针(默认空) ``` #### 核心组件解析: 1. **`__init__`方法** - 构造函数的特殊方法,创建节点实例时自动调用 - `self`参数:指向当前创建的节点实例 - `val`参数:节点存储的整数,默认为`0` - `left/right`参数:子节点指针,默认`None`表示无子节点 2. **节点属性** - `self.val`:存储节点核心数据(通常为整数) - `self.left`:指向左子的指针(TreeNode类型或None) - `self.right`:指向右子的指针(TreeNode类型或None) 3. **默认设计** - `val=0`:确保节点创建时总有有效 - `left=None/right=None`:简化叶子节点的创建 #### 使用示例: ```python # 创建叶子节点(无子节点) leaf = TreeNode(val=5) # 创建带子节点的 left_child = TreeNode(2) right_child = TreeNode(3) root = TreeNode(1, left_child, right_child) ``` #### 二叉树特性: 1. **递归结构**:每个子本身也是二叉树 2. **指针实现**:通过`left/right`链接形成形结构 3. **内存效率**:仅存储和两个指针,空间复杂度$O(1)$每节点 这种定义是LeetCode等平台的标准二叉树实现方式,支持前序/中序/后序遍历等算法[^1][^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值