【Offer】[55-1] 【二叉树的深度】】的更多相关文章

题目 剑指 Offer 55 - I. 二叉树的深度 思路1(DFS) 后续遍历吧,先遍历到最深(递归到末尾返回0),然后从后面一步一步比较取大的值返回,每次返回层数都加1, 执行流程是怎样的:比如其中一个节点左子树为空,右子树有一个叶子节点,那么 0 > 1 ,肯定选 1 ,再加上当前一层 1 ,返回 2 给父节点:然后到了父节点对两个子节点的比较,其中一个节点就是刚才的 2 ,如果另一个返回的深度为4,那么就取 4 ,再加上当前的 1 返回 5 给它的父节点--直到返回到根节点,此时就得到了…
题目描述 输入一棵二叉树的根节点,求该树的深度.从根节点到叶节点依次经过的节点(含根.叶节点)形成树的一条路径,最长路径的长度为树的深度. 例如: 给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回它的最大深度 3 . 提示: 节点总数 <= 10000 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/er-cha-shu-de-shen-du-lcof 代码实现 /** * Defi…
剑指 Offer 55 - I. 二叉树的深度 知识点:二叉树,递归 题目描述 输入一棵二叉树的根节点,求该树的深度.从根节点到叶节点依次经过的节点(含根.叶节点)形成树的一条路径,最长路径的长度为树的深度. 示例 输入:root = [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1] 解法一:递归法 函数功能:一个树的深度 1.终止条件:节点为空,深度为0: 2.该做什么:当前节点为根的树深度是左子树和右子树深度大的+1: 3.什么时候做:得知道子树的深度才能知道当前树:后序…
问题描述 输入一棵二叉树的根节点,求该树的深度.从根节点到叶节点依次经过的节点(含根.叶节点)形成树的一条路径,最长路径的长度为树的深度. 例如: 给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回它的最大深度 3 .   提示: 节点总数 <= 10000 代码 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left;…
题目 剑指 Offer 55 - II. 平衡二叉树 思路1(后序遍历+剪枝) 这题是上一题剑指 Offer 55 - I. 二叉树的深度的进阶,逻辑代码和那个一样,也是后续遍历,获取两个子节点较大的那个深度再加上当前一层返回给父节点,是自底向上的 也为要求是否为平很二叉树,要保证他的左子树和右子树差值不大于1,那么我们就在每次获取左右子树的深度的时候再加一个判断就好啦- 但是我们可以进行剪枝优化,如果不剪枝,就算判定为不是平衡二叉树,那么它还是会递归遍历完.当发现不是平衡二叉树的时候,我们返回…
面试题 55. 二叉树的深度 题目一:二叉树的深度 题目描述:输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. Java 实现 /** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNode left, right; * public TreeNode(int val) { * this.val = val…
剑指Offer 面试题39:二叉树的深度(高度) 题目:输入一棵二叉树的根结点,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度.例如:输入二叉树:                                            10                                          /     \                                        6        14   …
// 面试题55(一):二叉树的深度 // 题目:输入一棵二叉树的根结点,求该树的深度.从根结点到叶结点依次经过的 // 结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. //如果左右节点只有一个存在,则深度为该存在的节点的深度+1 //如果左右节点都存在,则深度为最大子节点深度+1 #include <iostream> #include "BinaryTree.h" int TreeDepth(const BinaryTreeNode* pRoot) {…
剑指Offer - 九度1350 - 二叉树的深度2013-11-23 00:54 题目描述: 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 输入: 第一行输入有n,n表示结点数,结点号从1到n.根结点为1. n <= 10. 接下来有n行,每行有两个个整型a和b,表示第i个节点的左右孩子孩子.a为左孩子,b为右孩子.当a为-1时,没有左孩子.当b为-1时,没有右孩子. 输出: 输出一个整型,表示树的深度.     样例…
题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 输入一棵二叉树的根节点,求该树的深度.从根节点到叶节点依次经过的节点(含根.叶节点)形成树的一条路径,最长路径的长度为树的深度. 牛客网刷题地址 思路分析 利用递归,先计算左右子树的深度,判断左子树和右子树深度,大的+1 即为此二叉树的深度. 测试用例 功能测试:输入普通的二叉树;二叉树中所有节点都没有左/右子树. 特殊输入测试:二叉树只有一个节点;二叉树的头节点为nullptr指针. Java代码 public class Off…
题目:二叉树的深度 考点:知识迁移能力 题目描述:输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 牛客网上的剑指offer题,我按从简单到难的排序来做了 思路:从根节点出发, 查询左子树的深度 , 获取右子树的深度,比较一下,取大的,再加一 .就是整个二叉树的深度   法一:递归 /** public class TreeNode { int val = 0; TreeNode left = null; TreeNode…
一.题目一:二叉树的深度 1.1 题目说明 题目一:输入一棵二叉树的根结点,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度.例如下图中的二叉树的深度为4,因为它从根结点到叶结点最长的路径包含4个结点(从根结点1开始,经过结点2和结点5,最终到达叶结点7). 二叉树的结点定义如下,这里使用C#语言描述: public class BinaryTreeNode { public int Data { get; set; } public Bin…
题目:输入一棵二叉树的根节点,求该数的深度. 从根节点到叶结点依次进过的结点(含根,叶结点)形成树的一条路径,最长路径的长度为树的深度. 比如.例如以下图的二叉树的深度为4.由于它从根节点到叶结点的最长的路径包括4个结点(从根结点1開始,经过2和结点5,终于到达叶结点7) watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Ce…
题目: 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 结点的定义如下: struct TreeNode{ int val; TreeNode* left; TreeNode* right; }; 思路: 对于树的问题基本都可以通过递归来解决. 一棵二叉树的深度,等于它的左子树深度和右子树深度的较大者+1: 递归的结束条件就是:该结点为空,深度为0: 代码: struct TreeNode{ int val; TreeNo…
题目描述: 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 分析: 二叉树的深度等于其左子树的深度和右子树的深度两个中最大的深度加一. 代码: /* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } };*/ class…
原创博文,转载请注明出处! # 题目 # 举例        下图二叉树的深度为4,最长路径为1-2-5-7. # 思路(递归)       如果一个树只有一个节点,它的深度为1: 如果根节点只有左子树而没有右子树,那么树的深度应该是其左子树的深度+1: 如果根节点只有右子树而没有左子树,那么树的深度应该是其右子树的深度+1: 如果根节点既有左子树又有右子树,那么树的深度应该是左右字数深度的较大值+1. # 代码 class Solution { public: int TreeDepth(Tr…
剑指 Offer 55 - II. 平衡二叉树 Offer_55_2 题目描述 方法一:使用后序遍历+边遍历边判断 package com.walegarrett.offer; /** * @Author WaleGarrett * @Date 2021/2/9 20:58 */ /** * 题目描述:输入一棵二叉树的根节点,判断该树是不是平衡二叉树. * 如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树. */ import sun.reflect.generics…
二叉树的结构 二叉树是比较常见的一种的一种数据结构. 首先看看二叉树的数据结构: //由左节点和右节点以及一个节点值构成 public class TreeNode{ TreeNode leftNode; TreeNode rightNode; int val; TreeNode(int val){ this.val=val; this.leftNode=null; this.rightNode=null; } } 正是由于二叉树的这个结构,所以我们常用遍历解决二叉树的相关问题. 二叉树的深度问…
数据结构实验之二叉树八:(中序后序)求二叉树的深度 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 已知一颗二叉树的中序遍历序列和后序遍历序列,求二叉树的深度. Input 输入数据有多组,输入T,代表有T组数据.每组数据包括两个长度小于50的字符串,第一个字符串表示二叉树的中序遍历,第二个表示二叉树的后序遍历. Output 输出二叉树的深度. Sample Input 2 dbgeafc dgebfca lnix…
题目描述 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 递归解析: 思路: 从根节点出发,查询左子树的深度,获取右子树的深度,比较一下,取大的,再加一.就是整个二叉树的深度. 递归的三个条件 边界条件:当前节点下,是否还有子节点,没有返回,有继续递归 递归前进段:当前节点下,还有子节点 递归返回段:当前节点下,没有子节点 递归解答 /** public class TreeNode { int val = 0; Tree…
剑指 Offer 68 - II. 二叉树的最近公共祖先 Offer_68_2 题目详情 题解分析 java代码 package com.walegarrett.offer; /** * @Author WaleGarrett * @Date 2021/2/16 14:01 */ /** * 题目描述:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. */ public class Offer_68_2 { public TreeNode lowestCommonAncestor(Tre…
剑指 Offer 68 - II. 二叉树的最近公共祖先 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p.q,最近公共祖先表示为一个结点 x,满足 x 是 p.q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)." 例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4] 示例 1: 输入: root = [3,5,1,6,2,0,8,null,null,7…
2013-09-03 14:16:51 面试题39:求二叉树的深度.判断二叉树是否为平衡二叉树 小结: 根据平衡二叉树的定义,需要判断每个结点,因此,需要遍历二叉树的所有结点,并判断以当前结点为根的树是否为二叉树: 用后序遍历的方式,先判断左右子树是否为平衡的,在判断当前节点: 可以对每个结点求深度,根据深度判断,如函数IsBanlancedTreeBasic所示,但这种方法存在重复遍历,效率较低: 后序遍历时,一边判断是否为平衡二叉树,一边求而二叉树的深度,这样就避免了重复遍历,如函数IsBa…
这是剑指offer中关于二叉树重构的一道题.题目原型为: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回. 一.二叉树的数据结构 做题之前,我们先熟悉下二叉树的数据结构.其一,定义:二叉树是一个连通的无环图,并且每一个顶点的度不大于3.有根二叉树还要满足根结点的度不大于2.有了根结点之后,每个顶点定义了唯一的父…
二叉树的深度 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 输入一棵二叉树的根节点, 求该树的深度. 依次选择最深的左右子树, 然后递归加1. 代码: /* * main.cpp * * Created on: 2014.6.12 * Author: Spike */ /*eclipse cdt, gcc 4.8.1*/ #include <stdio.h> #include <stdlib.h> #include <…
本题来自<剑指offer> 重构二叉树 题目: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回. 思路: 二叉树的前序遍历:根左右,第一个值是根节点 二叉树的中序遍历:左根右,根节点的值在中间,左子树的节点在根的左边,右子树的节点在根的右边 首先找到前序的根节点,继而对应到中序中,分离出中序的根左.右子树.…
二叉树的深度: 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 思路: 1.非递归层序遍历 2.使用辅助队列,根结点先入队列 3. 循环判断队列是否为空,如果不为空就继续循环队列里面的每个结点 4. 循环队列时,当前当前结点出队列,把该结点的左右孩子入队列 TreeDepth(tree) if !tree return 0 array_push(queue,tree); depth=0 while(!empty(queue…
将二叉树相关的操作集中在一个实例里,有助于理解有关二叉树的相关操作: 1.定义树的结构体: typedef struct TreeNode{ int data; struct TreeNode *left; struct TreeNode *right; }TreeNode; 2.创建根节点: TreeNode *creatRoot(){ TreeNode * root =(TreeNode *)malloc(sizeof(TreeNode)); if(NULL==root){ printf("…
二叉树的深度的概念最值得注意的地方,在于 到"叶子"节点的距离. 一般来说,如果直接说“深度”,都是指最大深度,即最远叶子的距离. 这里放两道例题,最小深度和最大深度. 1. 二叉树的最小深度 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…
二叉树有深度和高度两个属性,一个节点的深度指的是从根节点到该节点路径的长度,根节点的深度为1:一个节点的高度指的是从该节点到叶子节点所有路径上包含节点个数的最大值.叶子节点的高度为1,往上节点的高度依次递增.所以要求二叉树的深度,我们要求出从根节点到叶子结点最长路径的长度,从根节点到所有的叶子结点,实际就是在遍历这棵树,使用深度优先遍历可以解决这个问题. 首先还是定义一颗二叉树的类. class TreeNode: def __init__(self, x): self.val = x self…