当前位置: 首页 > news >正文

二叉树系列(遍历/dfs/bfs)10.10

一、二叉树的右视图(遍历)

给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。

(如果右子树为空的话,那么右视图中看到的就是左子树的节点)

bfs层序遍历:
思路:

需要用到一个队列,然后把每一层中的节点添加到队列中,遍历到最后一个节点的时候就是最右边的,添加到res中即可。

代码:
class Solution {public List<Integer> rightSideView(TreeNode root) {List<Integer> res=new ArrayList<>();Queue<TreeNode> queue=new ArrayDeque<>();if(root==null)return res;queue.add(root);while(!queue.isEmpty()){int size=queue.size();for(int i=0;i<size;i++){TreeNode cur=queue.poll();if(cur.left!=null)queue.add(cur.left);if(cur.right!=null)queue.add(cur.right);if(i==size-1)res.add(cur.val); }}return res;}
}
dfs右序遍历
思路:

因为题目中要求我们返回右视图的结果集。因此我们首先递归右子树,然后再去递归左子树。

如果右子节点一直存在的话,那么就一直往下dfs搜索,添加到res中;

如果右子节点为null的话,那么就向上返回,往左递归。注意这里要判断当前的深度和res的大小。只有depth==res.size()时,说明该层该元素是第一个访问的。

代码:
class Solution {List<Integer> res=new ArrayList<>();public List<Integer> rightSideView(TreeNode root) {dfs(root,0);return res;}public void dfs(TreeNode root,int depth){if(root==null)return;if(res.size()==depth){res.add(root.val);//每一层只能添加一个子节点}depth++;dfs(root.right,depth);dfs(root.left,depth);}
}

二、路经总和

给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。

思路:

1.首先题目要求我们的是从根节点到叶子节点,所以我们写终止条件的时候一定要写叶子结点的终止条件,如下:

if(root==null)return false;
if(root.left==null&&root.right==null)return targetSum==root.val;

我第一次写成了

if(root==null)return targetSum==0;

 这样就会导致和题意不符合,就不是根节点到叶子节点了。

2.然后,就向左右子节点遍历即可,但是要注意的是,要先判断左右子节点是否为空。

        boolean left=false;boolean right=false;if(root.left!=null)left=dfs(root.left,targetSum-root.val);if(root.right!=null)right=dfs(root.right,targetSum-root.val);
代码: 
class Solution {public boolean hasPathSum(TreeNode root, int targetSum) {if(root==null)return false;return dfs(root,targetSum);}public boolean dfs(TreeNode root,int targetSum){if(root==null)return false;if(root.left==null&&root.right==null)return targetSum==root.val;boolean left=false;boolean right=false;if(root.left!=null)left=dfs(root.left,targetSum-root.val);if(root.right!=null)right=dfs(root.right,targetSum-root.val);return left||right;}
}

三、二叉树最小深度

给定一个二叉树,找出其最小深度。

最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明:叶子节点是指没有子节点的节点。

dfs深搜:
思路:

我们要找到根节点到叶子节点中的最短路径。那我们就要去判断每次遍历的节点。

如果是叶子节点,返回1;

如果是null,返回0;

如果左右节点有一个为空,那么就返回非空那边的深度;

如果两个都不为空,那么就返回其中的较小值。

代码:
class Solution {public int minDepth(TreeNode root) {if(root==null)return 0;int leftDepth=minDepth(root.left);int rightDepth=minDepth(root.right);//如果一边为空 或者都不为空if(root.left==null||root.right==null)return leftDepth+rightDepth+1;//如果两边都为空 就是一个叶子节点return Math.min(leftDepth,rightDepth)+1;}
}
bfs广搜:
思路:

层序遍历的思路

代码:
class Solution {public int minDepth(TreeNode root) {if(root==null)return 0;int res=0;Queue<TreeNode> queue=new ArrayDeque<>();queue.add(root);while(!queue.isEmpty()){int size=queue.size();res++;for(int i=0;i<size;i++){TreeNode cur=queue.poll();if(cur.left==null&&cur.right==null)return res;if(cur.left!=null)queue.add(cur.left);if(cur.right!=null)queue.add(cur.right);}}return res;}
}

四、求根节点到叶节点数字之和

给你一个二叉树的根节点 root ,树中每个节点都存放有一个 0 到 9 之间的数字。

每条从根节点到叶节点的路径都代表一个数字:

  • 例如,从根节点到叶节点的路径 1 -> 2 -> 3 表示数字 123 。

计算从根节点到叶节点生成的 所有数字之和 。叶节点 是指没有子节点的节点。

思路:

如果遍历到第x个节点,我们需要把值求出来,然后传给下一个节点,下一个节点*10+root.val之后,再传给下一个节点。当遇到节点为叶子结点的时候,就返回值。

代码:
public int dfs(TreeNode node,int cur){if(node==null)return 0;int newCur=cur*10+node.val;if(node.left==null&&node.right==null)return newCur;int leftNum=dfs(node.left,newCur);int rightNum=dfs(node.right,newCur);return leftNum+rightNum;}


http://www.mrgr.cn/news/47195.html

相关文章:

  • linux的大内核锁与顺序锁
  • Linux:动态库和静态库
  • django在线考试系统
  • PHP Filesystem:深入解析与实战应用
  • likeadmin 打开弹框、修改组件上传地址
  • 机器人碳钢去毛刺,用大扭去毛刺主轴可轻松去除
  • Linux 常用命令详细总结
  • Android -- [SelfView] 自定义多色渐变背景板
  • Java对请求参数进行校验
  • [C#]未能加载文件或程序集Newtonsoft.Json
  • JVM错误:OutOfMemoryError: GC overhead limit exceeded
  • pipe和pipefd
  • 如何进行搭建与部署云主机?
  • 【微服务】链路追踪 - Micrometer(day9)
  • 爸妈用手机有多难?第一条就破防了
  • 如何用往期错题发起一场考试❓
  • Pytest+selenium UI自动化测试实战实例
  • win10电脑导航栏经常卡死改善方法
  • 如何高效进行网络质量劣化分析与流量回溯分析
  • 卷积神经网络细节问题及知识点
  • 领域驱动设计DDD的工作机制
  • 微信服务号灰度测试折叠,看谁该慌了?
  • Facebook直播分析与问题解决策略
  • 【网络】详解TCP协议中的可靠传输
  • 中科星图GVE(案例)——AI提取指定采样区域的建筑物范围
  • Android WebView 与 H5 交互的一些总结