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. 项目Alpha冲刺 10

    作业描述 课程: 软件工程1916|W(福州大学) 作业要求: 项目Alpha冲刺(团队) 团队名称: 火鸡堂 作业目标: 介绍第10天冲刺的项目进展.问题困难和心得体会 1.团队信息 队名:火鸡堂 ...

  2. c# 3.0语言主要增强

    1隐含类型的局部变量 var i=5; var h=23.56; var s="Cshap" var intarr=new[]{1,2,3}; var 为关键字,可以根据后边的初始 ...

  3. ElementUI——动态表单验证

    前言 版本更新迭代的时候,需要用到一个动态表单的功能,ElementUI刚好有教程就改改用咯 步骤 代码 <!-- 手机副号动态表单框 --> <el-form-item v-for ...

  4. C++异常处理(二)----声明接口

    接口声明的三种形式 抛出一切形式的异常 void freeobj(mycoach &t) { ) { cout <<"精神可嘉~但还是年龄太小" << ...

  5. python OOP

    object oriented programming 干啥的 1.避免重名(封装) 2.避免代码重复(继承) 3.将复杂的流程抽象地封装起来 4.模块化程度高,应对复杂编程问题 1)划分职责-要做的 ...

  6. [Codeforces 1265E]Beautiful Mirrors

    Description 题库链接 一共有 \(n\) 个关卡,你初始在第一个关卡.通过第 \(i\) 个关卡的概率为 \(p_i\).每一轮你可以挑战一个关卡.若通过第 \(i\) 个关卡,则进入第 ...

  7. 编程用泰勒公式求e的近似值,直到最后一项小于10的负6次方为止。

    #include<stdio.h>#include<math.h>void main(){ int n; float j=1.0,sum=1.0; for(n=1;;n++) ...

  8. Visual C++ 里的异常处理

    微软Visual C++是Win32最广泛使用的编译器,因此Win32反向器对其内部工作非常熟悉.能够识别编译器生成的粘合代码有助于快速集中于程序员编写的实际代码.它还有助于恢复程序的高级结构.我将集 ...

  9. 文字环绕和两栏自适应以及区域滚动插件iscroll.js

    一.文字环绕效果:使用浮动 <div class="boxleft"></div> 我是一段文字我是一段文字我是一段文字我是一段文字我是一段文字我是一段文字 ...

  10. GoCN每日新闻(2019-10-09)

    GoCN每日新闻(2019-10-09) GoCN每日新闻(2019-10-09) 1. 我们如何将服务延迟减少了98% https://blog.gojekengineering.com/the-n ...