1.二叉树的最大深度

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

二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。

说明: 叶子节点是指没有子节点的节点。

示例:
给定二叉树 [3,9,20,null,null,15,7]

    3
/ \
9 20
/ \
15 7

返回它的最大深度 3 。

java

/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public int maxDepth(TreeNode root) {
if(root==null) return 0;
int left = maxDepth(root.left)+1;
int right = maxDepth(root.right)+1;
int max = left>right?left:right;
return max;
}
}

php

/**
* Definition for a binary tree node.
* class TreeNode {
* public $val = null;
* public $left = null;
* public $right = null;
* function __construct($value) { $this->val = $value; }
* }
*/
class Solution { /**
* @param TreeNode $root
* @return Integer
*/
function maxDepth($root) {
if($root == NULL) return 0;
$left = $this->maxDepth($root->left)+1;
$right = $this->maxDepth($root->right)+1;
$max = max($left,$right);
return $max;
}
}

简化

/**
* Definition for a binary tree node.
* class TreeNode {
* public $val = null;
* public $left = null;
* public $right = null;
* function __construct($value) { $this->val = $value; }
* }
*/
class Solution { /**
* @param TreeNode $root
* @return Integer
*/
function maxDepth($root) {
return $root == NULL ? 0 : max($this->maxDepth($root->left), $this->maxDepth($root->right)) + 1;
}
}

2.二叉树的层次遍历 II

给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)

例如:
给定二叉树 [3,9,20,null,null,15,7], 3
/ \
9 20
/ \
15 7
返回其自底向上的层次遍历为: [
[15,7],
[9,20],
[3]
]

java

class Solution {
public List<List<Integer>> levelOrderBottom(TreeNode root) { List<List<Integer>> lists = new ArrayList<>();
if(root==null) new ArrayList<>();
func(lists,root,0);
for(int i=0,j=lists.size()-1;i<j;i++,j--){
List<Integer> tmp = lists.get(i);
lists.set(i,lists.get(j));
lists.set(j,tmp);
}
return lists;
} private void func(List<List<Integer>> lists,TreeNode root,int level){ if(root==null) return;
if(lists.size()==level){
List<Integer> tmp = new ArrayList<>();
tmp.add(root.val);
lists.add(tmp);
}else{
lists.get(level).add(root.val);
}
func(lists,root.left,level+1);
func(lists,root.right,level+1);
}
}

TreeNode

class TreeNode {
int val;
TreeNode left;
TreeNode right; TreeNode(int x) {
val = x;
}
}

测试

import java.util.List;

public class Main {
public static void main(String[] args) {
Solution ss = new Solution();
TreeNode root = new TreeNode(3); TreeNode a1 = new TreeNode(9);
TreeNode a2 = new TreeNode(20);
root.left = a1;
root.right = a2; TreeNode b1 = new TreeNode(15);
TreeNode b2 = new TreeNode(7);
a2.left = b1;
a2.right = b2;
List<List<Integer>> lists = ss.levelOrderBottom(root);
System.out.print("result----"+ lists.toString());
}
}

php

class TreeNode{
public $val = null;
public $left = null;
public $right = null;
public function __construct($value)
{$this->val = $value;}
} class Solution { /**
* @param TreeNode $root
* @return Integer[][]
*/
public function levelOrderBottom($root)
{
if (empty($root)) {
return [];
}
$lists = [];
$lists = $this->func($lists, $root, 0);
for ($i = 0, $j = count($lists) - 1; $i < $j; $i++) {
$tmp = $lists[$i];
$lists[$i] = $lists[$j];
$lists[$j] = $tmp;
$j--;
}
return $lists;
} public function func(&$lists, $root, $level = 0)
{
if (empty($root)) {
return null;
} if (count($lists) == $level) {
$lists[$level][]=$root->val;
} else {
$lists[$level][]= $root->val;
}
$this->func($lists, $root->left, $level + 1);
$this->func($lists, $root->right, $level + 1);
return $lists;
}
}

测试

//[3,9,20,null,null,15,7]
$root = new TreeNode(3); $a1 = new TreeNode(9);
$a2 = new TreeNode(20);
$b1 = new TreeNode(15);
$b2 = new TreeNode(7); $root->left = $a1;
$root->right = $a2; $a2->left = $b1;
$a2->right = $b2; $aa = new Solution();
$rs = $aa->levelOrderBottom($root);
var_dump(json_encode($rs));

算法练习之二叉树的最大深度,二叉树的层次遍历 II的更多相关文章

  1. lintcode : 二叉树的层次遍历II

    题目 二叉树的层次遍历 II 给出一棵二叉树,返回其节点值从底向上的层次序遍历(按从叶节点所在层到根节点所在的层遍历,然后逐层从左往右遍历) 样例 给出一棵二叉树 {3,9,20,#,#,15,7}, ...

  2. LintCode 二叉树的层次遍历 II

    中等 二叉树的层次遍历 II 查看执行结果 42% 通过 给出一棵二叉树,返回其节点值从底向上的层次序遍历(按从叶节点所在层到根节点所在的层遍历,然后逐层从左往右遍历) 您在真实的面试中是否遇到过这个 ...

  3. 107. 二叉树的层次遍历 II

    107. 二叉树的层次遍历 II 题意 给定一个二叉树,返回其节点值自底向上的层次遍历. (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历). 解题思路 递归:利用前序遍历的思想,在递归过程中 ...

  4. LintCode-70.二叉树的层次遍历 II

    二叉树的层次遍历 II 给出一棵二叉树,返回其节点值从底向上的层次序遍历(按从叶节点所在层到根节点所在的层遍历,然后逐层从左往右遍历) 样例 给出一棵二叉树 {3,9,20,#,#,15,7}, 按照 ...

  5. LeetCode107. 二叉树的层次遍历 II

    107. 二叉树的层次遍历 II 描述 给定一个二叉树,返回其节点值自底向上的层次遍历. (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 示例 例如,给定二叉树: [3,9,20,null ...

  6. Java实现 LeetCode 107 二叉树的层次遍历 II(二)

    107. 二叉树的层次遍历 II 给定一个二叉树,返回其节点值自底向上的层次遍历. (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 例如: 给定二叉树 [3,9,20,null,null, ...

  7. <二叉树的基本操作(有层次遍历)>

    #include<stdio.h> #include<stdlib.h> #include<string.h> #define num 100 #define OK ...

  8. [Swift]LeetCode107. 二叉树的层次遍历 II | Binary Tree Level Order Traversal II

    Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left ...

  9. Qt实现 动态化遍历二叉树(前中后层次遍历)

    binarytree.h 头文件 #ifndef LINKEDBINARYTREE_H #define LINKEDBINARYTREE_H #include<c++/algorithm> ...

随机推荐

  1. 第9期《python3接口自动化测试》课程,6月29号开学!

    2019年 第9期<python3接口自动化测试>课程,6月29号开学! 主讲老师:上海-悠悠 上课方式:QQ群视频在线教学 本期上课时间:6月29号-7月28号,每周六.周日晚上20:3 ...

  2. Vuex 是什么?

    Vuex 是什么? Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件状态,并以相应的规则保证状态以一种可预测的方式发生变   什么是"状态管 ...

  3. LGOJP2051 [AHOI2009]中国象棋

    比较明显的计数dp.不知道为什么被打了状压的tag... 不难发现无论炮放在哪里其实是等价的,需要知道的只有这一列放了一个炮还是两个炮还是还没放,那么可以设\(f[i,j,k]\)表示第\(i\)行, ...

  4. js解决大文件断点续传

    最近遇见一个需要上传百兆大文件的需求,调研了七牛和腾讯云的切片分段上传功能,因此在此整理前端大文件上传相关功能的实现. 在某些业务中,大文件上传是一个比较重要的交互场景,如上传入库比较大的Excel表 ...

  5. C博客作业01--分支丶顺序结构

    1.本章学习总结 1.1学习内容总结 分支结构 if else-if语句与switch语句都具有选择判断的功能,但是在使用时又有所区别,按题目的不同要求与题意选择不同语句. if else-if语句表 ...

  6. 「ZJOI2016」小星星

    传送门 Description Solution 容斥,考虑有多少个节点不被匹配到,求出的方案,多个点可以同时不被匹配到 状态压缩+树形dp Code  #include<bits/stdc++ ...

  7. 简书 markdown 代码高亮标记

    SyntaxHighlight language language_key 1C 1c ActionScript actionscript Apache apache AppleScript a pp ...

  8. java 优秀开源项目

    一.https://github.com/zhangdaiscott/jeecg-boot 简介:一款基于代码生成器的JAVA快速开发平台!全新架构前后端分离:SpringBoot 2.x,Ant D ...

  9. kubernetes监控终极方案-kube-promethues

    kube-promethues简介 前面我们学习了Heapster+cAdvisor方式监控,这是Prometheus Operator出现之前的k8s监控方案.后来出现了Prometheus Ope ...

  10. 【软工实践】Beta冲刺(4/5)

    链接部分 队名:女生都队 组长博客: 博客链接 作业博客:博客链接 小组内容 恩泽(组长) 过去两天完成了哪些任务 描述 新增数据分析展示等功能API 服务器后端部署,API接口的beta版实现 展示 ...