算法题--二叉树(判断是不是平衡二叉树、二叉树的中序遍历、二叉树最大深度、对称二叉树、合并二叉树)
创始人
2024-05-31 21:49:22
0

目录

二叉树

题目

判断是不是平衡二叉树

题链接

解析

核心思想

答案

二叉树的中序遍历

原题链接

解析

核心思想

答案

二叉树最大深度、对称二叉树、合并二叉树


二叉树

该类题目的解决一般是通过节点的遍历去实现,一般是分两种。

一是递归(深度优先),该方法通常代码比较简单,难懂。首先需要确定入参和返回的内容,然后确定层级之间的关系,最后去找递归的出口。

二是广度优先(该方法一般只有可以分层次处理的才能用),该方法代码量多,易懂。首先借助数组存储第一层的节点,然后每次将数组中的节点分批从数组头部取出(当对比2个节点时就一次取2个),处理完后将对应的子节点分批再从数组尾部存入数组(注意需要对比的子节点相邻存入,这样取出正好配对)。递归上述步骤直到数组为空。

题目

判断是不是平衡二叉树

输入一棵节点数为 n 二叉树,判断该二叉树是否是平衡二叉树。

在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树

平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。

样例解释:

样例二叉树如图,为一颗平衡二叉树

注:我们约定空树是平衡二叉树。

function TreeNode(x) {this.val = x;this.left = null;this.right = null;
}
function IsBalanced_Solution(pRoot) {}

题链接

判断是不是平衡二叉树_牛客题霸_牛客网

解析

注意该题无法使用广度优先算法,因为无法分层次处理(通过层次是无法判断是否为平衡数,可能出现底部相邻叶子节点高度只差1,而顶部的左右子树高度相差超过1)。

核心思想

递归、深度优先:

1.确定入参1个,出参,由于是要判断相邻子节点深度,所以出参返回深度差小于1&&深度,即小于1时返回该节点的深度,最后将深度数值通过boolean转换。

2.找到上下层的关系,f(x)=Math.abs(f(x.left)-f(x.right))<=1 && Math(x.left,x.right)+1

3.找出口,这里注意当f(x.left)和f(x.right)返回为false时要直接return false。

答案

function IsBalanced_Solution(pRoot) {function check(pRoot) {if (!pRoot) return 1let left = check(pRoot.left)if (!left) return falselet right = check(pRoot.right)if (!right) return falsereturn Math.abs(right - left) <= 1 && Math.max(left, right) + 1}return Boolean(check(pRoot))
}

二叉树的中序遍历

给定一个二叉树的根节点root,返回它的中序遍历(左根右)结果。

例如下图返回顺序为0、1、3、4、5、7、11、12、14

原题链接

二叉树的中序遍历_牛客题霸_牛客网 

解析

注意该题无法使用广度优先算法,因为无法分层次处理。

核心思想

递归:

1.确定入参和出参,由于返回的是一个数组为遍历的节点值。所以新借助函数将值在遍历过程中存储到数组中,该函数入参1个,返回为空。

2.确定上下层关系,f(x)为将x加入数组中,则当x存在时,应该先满足加入左节点,再加入中间节点,后加入右节点。f(x)= f(x.left)  + 加入x节点 + f(x.right)。

3.找出口,x不存在时不执行任何操作

方法二(借助数组循环):

1.首先将所有的左节点和根节点加入stack数组中。

2.读取第一个左节点(最左端节点),值存入res数组。如果该节点右节点不存在,则读取下一个左节点重复2操作,如果存在则将右节点上的所有左节点加入stack数组中,重复2操作。

3.当stack为空时返回res数组。

答案

方法一(递归)

function inorderTraversal(root) {let arr = []function order(root) {if (root) {order(root.left)arr.push(root.val)order(root.right)}}order(root)return arr
}

方法二

function inorderTraversal( root ) {const res = []if(!root) return res;function inOrder(root,res){let node = rootconst stack = []while(stack.length||node){while(node){stack.push(node)node = node.left}const top = stack.pop()res.push(top.val)node = top.right}}inOrder(root, res)return res
}

二叉树最大深度、对称二叉树、合并二叉树

算法题--广度优先算法(素数行李箱密码、二叉树的最大深度、对称二叉树、合并二叉树解法加步骤)_行李箱密码计算_YF-SOD的博客-CSDN博客

相关内容

热门资讯

高考志愿平行志愿是什么意思详... 高考志愿平行志愿是什么意思详解 篇一高考志愿平行志愿是什么意思详解高考是每个学生都要经历的一场考试,...
最新高考作文预测:成长为“T... 最新高考作文预测:成长为“T”型人才 篇一随着社会的发展和变革,人才的培养也面临着新的挑战。传统的专...
山东省高考优秀作文【优秀3篇... 山东省高考优秀作文 篇一:《奋斗的力量》山东省高考优秀作文 篇二:《家乡的美》山东省高考优秀作文 篇...
语文高考作文范文500字18... 语文高考作文范文500字18篇 篇一标题:尊重自然,保护生态第一篇内容尊重自然,保护生态是我们每个人...
高考作文春来草自青【优选3篇... 高考作文春来草自青 篇一:追寻春天的足迹春季是一年中最美丽的时节,万物复苏,草木葱茏。在这个季节里,...
上海卷高考作文题目:更重要的... 上海卷高考作文题目:更重要的事 篇一重要事情的定义因人而异"更重要的事"是一个主观而又复杂的概念。对...
河南85.5万考生高考 录取... 河南85.5万考生高考 录取率达75% 篇一高考是每个学子人生中的一次重要考试,也是他们人生的一个重...
高考祝福语【经典6篇】 高考祝福语 篇一高考祝福语是每年高考季节的重要组成部分,它们是对正在经历高考压力的学生们的一种鼓励和...
高考语文全国甲卷可为与有为作... 高考语文全国甲卷可为与有为作文 篇一高考语文全国甲卷可为与有为作文在高考语文全国甲卷中,有一个题目是...
高考满分作文1000字(经典... 高考满分作文1000字 篇一如何正确备考高考备考高考是每个高中生都要面对的一项重要任务。正确备考不仅...
《高考作文素材精粹与多向运用... 《高考作文素材精粹与多向运用》押中高考作文题3 篇一作文题目:如何应对社交媒体对青少年的负面影响社交...
高考数学作文满分范文素材【精... 高考数学作文满分范文素材 篇一标题:数学在现实生活中的应用数学是一门被广泛运用的学科,它不仅在学术领...
历年高考满分作文800字(通... 历年高考满分作文800字 篇一标题:互联网给我们带来的改变随着互联网的迅猛发展,我们的生活发生了翻天...
全国高考作文范文2022【推... 全国高考作文范文2022 篇一:疫情下的教育与成长2022年,全国高考如期而至,这是一个特殊的年份。...
一花一世界高考优秀作文(精选... 一花一世界高考优秀作文 篇一题目:花开的意义花开,仿佛是大自然对我们的馈赠。它们以各种各样的形态和色...
高考议论文(通用6篇) 高考议论文 篇一高考改革的必要性与挑战在中国的教育体系中,高考一直被视为学生人生的分水岭,对于他们的...
关于高考志愿的选择【推荐3篇... 关于高考志愿的选择 篇一高考志愿的选择对于每一个即将步入大学的学子来说都是至关重要的。一个好的志愿选...
电影《高考1977》的观后感... 电影《高考1977》的观后感 篇一《高考1977》是一部讲述中国文化大革命后第一次重启的高考故事。该...
高考满分作文:顽强拼搏,铸就... 高考满分作文:顽强拼搏,铸就辉煌 篇一顽强拼搏,铸就辉煌高考,是一场决定人生命运的战役,也是一次考验...
高考作文题(优质3篇) 高考作文题 篇一:如何提高高考作文写作能力高考作文一直是许多考生最担心的部分,因为作文的写作能力不仅...