题目
https://www.nowcoder.com/practice/0975d62a307549cea32f353f354a7377
思考
核心:层序遍历
参考答案Java
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* public TreeNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @return int整型
*/
public int widthOfBinaryTree (TreeNode root) {
//层序遍历的思想
List<TreeNode> q = new ArrayList<>();
List<Integer> idxq = new ArrayList<>();
q.add(root);
idxq.add(0);
int max = 1;
while (!q.isEmpty()) {
int size = q.size();
List<TreeNode> qbak = new ArrayList<>();
List<Integer> idxqbak = new ArrayList<>();
if (size > 1) {
int diff = idxq.get(idxq.size() - 1) - idxq.get(0) + 1;
if (diff > max) {
max = diff;
}
}
for (int i = 0; i < size; i++) {
TreeNode pop = q.get(i);
int idx = idxq.get(i);
if (pop.left != null) {
qbak.add(pop.left);
idxqbak.add(idx * 2 + 1);
}
if (pop.right != null) {
qbak.add(pop.right);
idxqbak.add(idx * 2 + 2);
}
}
q = qbak;
idxq = idxqbak;
}
// System.out.println(max);
return max;
}
}
参考答案Go
package main
import . "nc_tools"
/*
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @return int整型
*/
func widthOfBinaryTree(root *TreeNode) int {
//层序遍历的思想,BFS
q := []*TreeNode{}
idxq := []int{}
q = append(q, root)
idxq = append(idxq, 0)
ans := 1
for len(q) > 0 {
size := len(q)
qbak := []*TreeNode{}
idxqbak := []int{}
if size > 1 {
diff := idxq[size-1] - idxq[0] + 1
if diff > ans {
ans = diff
}
}
for i := 0; i < size; i++ {
pop := q[i]
idx := idxq[i]
if pop.Left != nil {
qbak = append(qbak, pop.Left)
idxqbak = append(idxqbak, 2*idx+1)
}
if pop.Right != nil {
qbak = append(qbak, pop.Right)
idxqbak = append(idxqbak, 2*idx+2)
}
}
q = qbak
idxq = idxqbak
}
return ans
}
参考答案PHP
<?php
/*class TreeNode{
var $val;
var $left = NULL;
var $right = NULL;
function __construct($val){
$this->val = $val;
}
}*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @return int整型
*/
function widthOfBinaryTree( $root )
{
//BFS 层序遍历的思想
$q = [$root];
$idxq = [0];
$max = 1;
while (count($q) > 0) {
$size = count($q);
$qbak = array();
$idxqbak = array();
if ($size > 1) {
$diff = $idxq[$size - 1] - $idxq[0] + 1;
if ($diff > $max) {
$max = $diff;
}
}
for ($i = 0; $i < $size; $i++) {
$pop = $q[$i];
$idx = $idxq[$i];
if ($pop->left != null) {
array_push($qbak, $pop->left);
array_push($idxqbak, 2 * $idx + 1);
}
if ($pop->right != null) {
array_push($qbak, $pop->right);
array_push($idxqbak, 2 * $idx + 2);
}
}
$q = $qbak;
$idxq = $idxqbak;
}
return $max;
}