首页 > 其他分享 >第五节:二叉树相关(反转二叉树[递归/栈]、最大路径和)

第五节:二叉树相关(反转二叉树[递归/栈]、最大路径和)

时间:2024-03-12 09:15:53浏览次数:16  
标签:right TreeNode 递归 current 第五节 二叉树 null root left

一. 反转二叉树

一. 题目描述

    给你一棵二叉树的根节点 root ,反转这棵二叉树,并返回其根节点。

    示例:

    leetcode:https://leetcode.cn/problems/invert-binary-tree/description/

    难度:【简单】

二. 思路分析1-递归

 1. 首先要有递归结束的条件

 2. 先写出来第一次运行的代码,然后将相应的位置改为递归调用即可


class TreeNode {
	val: number;
	left: TreeNode | null;
	right: TreeNode | null;
	constructor(val: number, left?: TreeNode | null, right?: TreeNode | null) {
		this.val = val === undefined ? 0 : val;
		this.left = left === undefined ? null : left;
		this.right = right === undefined ? null : right;
	}
}

function invertTree(root: TreeNode | null): TreeNode | null {
	//非空判断
	if (root === null) return null;

	//第一次代码
	// let leftNode = root.left;
	// root.left = root.right;
	// root.right = leftNode;

	//递归反转
	let leftNode = root.left;
	root.left = invertTree(root.right);
	root.right = invertTree(leftNode);

	return root;
}

 

三. 思路分析-栈

1. 声明栈,默认root入栈

2. while循环,栈中有数据

      A. 出栈,左右子节点交换(都为null,不操作)

      C. 左右子节点不为null,则入栈


function invertTree(root: TreeNode | null): TreeNode | null {
	//1.非空判断
	if (root === null) return null;

	//2.声明栈结构(数组模拟)
	let stack = [root];

	//3.遍历栈结构,进行反转交换
	while (stack.length > 0) {
		//3.1 出栈
		let current = stack.pop()!;

		//3.2 左右子节点交换位置
		//左右都为null, 不进行任何操作 (相当于null null 不需要进行交换,一个优化点)
		if (current.left !== null || current.right !== null) {
			let temp = current.left;
			current.left = current.right;
			current.right = temp;
		}

		//3.3 继续将节点入栈
		if (current.left) stack.push(current.left);
		if (current.right) stack.push(current.right);
	}

	return root;
}

 

二. 最大路径和

一. 题目描述

 

 

 

二. 思路分析

 

 

 

 

 

三. 代码实操

 

 

 

 

 

 

 

 

 

 

三. 

 

 

 

 

 

 

 

 

!

  • 作       者 : Yaopengfei(姚鹏飞)
  • 博客地址 : http://www.cnblogs.com/yaopengfei/
  • 声     明1 : 如有错误,欢迎讨论,请勿谩骂^_^。
  • 声     明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保留追究法律责任的权利。
 

标签:right,TreeNode,递归,current,第五节,二叉树,null,root,left
From: https://www.cnblogs.com/yaopengfei/p/18067539

相关文章

  • pg distinct 改写递归优化(德哥的思路)
    德哥的优化思路巨牛逼,这种递归思维真的太吊了,我目前就缺递归思路。 下面SQL1000W行数据,列的选择性很低,只有两个值('1'和'11')都是字符串类型,'1'只有一条数据,'11'有9999999行数据。慢SQL:selectdistinctcolfromtt;......
  • 递归函数-树形列表
    基本思想根据根节点没有父节点原理找到父节点;根据子节点的父id找到根节点所有的子节点;递归遍历父节点的所有子节点; privatevoidrecursionFn(List<SysDept>list,SysDeptt){//得到子节点列表List<SysDept>childList=getChildList(list,t......
  • 郑莉cpp习题6-22 用递归算法翻转字符串s
    郑莉cpp习题6-22  用递归算法翻转字符串s#include<iostream>usingnamespacestd;#include<string>voidreverse(string&s,intleft,intright){chart;if(left<right){t=s[left];s[left]=s[right];s[right......
  • 递归
    递归方法的递归:方法定义中调用方法本身的现象packagecom.shujia.day14;/*newStringBuffer().append().append()这个叫方法的链式调用show(fun1())方法的嵌套调用递归必备前提:1、进入递归的入口2、方法要有返回值3、结束递归......
  • 代码随想录 第17天 | ● 110.平衡二叉树 ● 257. 二叉树的所有路径 ● 404.左叶子之
    leetcode:110.平衡二叉树-力扣(LeetCode)classSolution{publicbooleanisBalanced(TreeNoderoot){returngetblan(root)!=-1;}privateintgetblan(TreeNoderoot){//为空退出if(root==null)return0;//左节......
  • 代码随想录 第十六天 | ● 104.二叉树的最大深度 559.n叉树的最大深度 ● 111.二叉树
    leetcode:104.二叉树的最大深度-力扣(LeetCode)思路:递归判断每次左右节点的是否存在,存在自然加一,return的1就是这样,判断子节点的左右两端是否有节点,统计有的节点数量,也就是左右的高度classSolution{publicintmaxDepth(TreeNoderoot){//后序遍历if......
  • 代码随想录算法训练营day17 | leetcode 110. 平衡二叉树、257. 二叉树的所有路径、404
    目录题目链接:110.平衡二叉树-简单题目链接:257.二叉树的所有路径-简单题目链接:404.左叶子之和-简单题目链接:110.平衡二叉树-简单题目描述:给定一个二叉树,判断它是否是平衡二叉树示例1:输入:root=[3,9,20,null,null,15,7]输出:true示例2:输入:root=[1,2,2,3,3,null,nul......
  • 代码随想录 第十五天 | ● 层序遍历 10 ● 226.翻转二叉树 ● 101.对称二叉树 2 感
    leetcode:102.二叉树的层序遍历-力扣(LeetCode)思路:用队列长度控制弹栈的多少,不等于空时获取root,因为传了一个根肯定是1,接下来找左右节点,将根节点弹出,获取下一次的size,一直到空。。。//102.二叉树的层序遍历classSolution{publicList<List<Integer>>resList=newA......
  • chapter8-递归与分治
    1.递归递归,指直接或间接地调用自身,解决此类题目的方法见我之前走台阶的笔记,重点有2个,(1)分析问题,归纳出递归公式;(2)递归出口。就像俄罗斯套娃一样,要让递归调用总体朝向递归出口推进。n的阶乘//递归-n的阶乘2024-03-08#include<iostream>#include<cstdio>usingnamespaces......
  • 二叉树中的最大路径和
    124.二叉树中的最大路径和二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。路径和 是路径中各节点值的总和。给你一个二叉树的根节点 root......