算法练习之二叉树的最大深度,二叉树的层次遍历 II
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的更多相关文章
- lintcode : 二叉树的层次遍历II
题目 二叉树的层次遍历 II 给出一棵二叉树,返回其节点值从底向上的层次序遍历(按从叶节点所在层到根节点所在的层遍历,然后逐层从左往右遍历) 样例 给出一棵二叉树 {3,9,20,#,#,15,7}, ...
- LintCode 二叉树的层次遍历 II
中等 二叉树的层次遍历 II 查看执行结果 42% 通过 给出一棵二叉树,返回其节点值从底向上的层次序遍历(按从叶节点所在层到根节点所在的层遍历,然后逐层从左往右遍历) 您在真实的面试中是否遇到过这个 ...
- 107. 二叉树的层次遍历 II
107. 二叉树的层次遍历 II 题意 给定一个二叉树,返回其节点值自底向上的层次遍历. (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历). 解题思路 递归:利用前序遍历的思想,在递归过程中 ...
- LintCode-70.二叉树的层次遍历 II
二叉树的层次遍历 II 给出一棵二叉树,返回其节点值从底向上的层次序遍历(按从叶节点所在层到根节点所在的层遍历,然后逐层从左往右遍历) 样例 给出一棵二叉树 {3,9,20,#,#,15,7}, 按照 ...
- LeetCode107. 二叉树的层次遍历 II
107. 二叉树的层次遍历 II 描述 给定一个二叉树,返回其节点值自底向上的层次遍历. (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 示例 例如,给定二叉树: [3,9,20,null ...
- Java实现 LeetCode 107 二叉树的层次遍历 II(二)
107. 二叉树的层次遍历 II 给定一个二叉树,返回其节点值自底向上的层次遍历. (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 例如: 给定二叉树 [3,9,20,null,null, ...
- <二叉树的基本操作(有层次遍历)>
#include<stdio.h> #include<stdlib.h> #include<string.h> #define num 100 #define OK ...
- [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 ...
- Qt实现 动态化遍历二叉树(前中后层次遍历)
binarytree.h 头文件 #ifndef LINKEDBINARYTREE_H #define LINKEDBINARYTREE_H #include<c++/algorithm> ...
随机推荐
- 跨平台的EVENT事件 windows linux(转)
#ifndef _HIK_EVENT_H_ #define _HIK_EVENT_H_ #ifdef _MSC_VER #include <Windows.h> #define hik_e ...
- about云Hadoop相关技术总结
让你真正明白spark streaminghttp://www.aboutyun.com/forum.php?mod=viewthread&tid=21141(出处: about云开发)
- [ML] Tensorflow.js + Image segmentPerson
<!DOCTYPE html> <html> <head> <title>Parcel Sandbox</title> <meta c ...
- H5如何实现关闭当前页面,跳转到新页面?
小程序有此功能的跳转方法. 那么H5如何实现该功能? 很简单. location.replace('new.html') 这个方法可以实现 关闭当前页面,跳转到新页面 的效果. 而 windo ...
- learning java 实例序列化
对Person类实例进行序例化及反序例化: Person.java public class Person implements java.io.Serializable { private Stri ...
- PDB文件会影响性能吗?
有人问了这样的问题:"我工作的公司正极力反对用生成的调试信息构建发布模式二进制文件,这也是我注册该类的原因之一.他们担心演示会受到影响.我的问题是,在发布模式下生成符号的最佳命令行参数是什么 ...
- openjdk k8s port-forward 连接容器jmx服务
jmx 是java 自带的,如果需要使用我们只需要添加对应的配置即可,以下演示docker 集成jmx 使用kompose 生成k8s 的部署文件,使用port-forward 进行连接,所以java ...
- 50、Spark Streaming实时wordcount程序开发
一.java版本 package cn.spark.study.streaming; import java.util.Arrays; import org.apache.spark.SparkCon ...
- 微信小程序HTTP封装请求
http.js import utils from "../../utils/utils" var http = utils.http; const douban = " ...
- 2016级移动应用开发在线测试12-service
有趣有内涵的文章第一时间送达! 喝酒I创作I分享 生活中总有些东西值得分享 @醉翁猫咪 1. Service是Android系统中的四大组件之一(Acitivty.Service.ContentPr ...