计算二叉树每层的和

BST is given.
Calculate and return array with a sum of every level.

For example,

1

2 3

4 5 1 2

Output should be [1, 5, 12].

遍历的时候记录节点在哪一层就行了,可以深度优先,不一定非得层序遍历。开始想复杂了

    private static class BinaryNode {
        BinaryNode left;
        BinaryNode right;
        int val;

        private BinaryNode(BinaryNode left, BinaryNode right, int val) {
            this.left = left;
            this.right = right;
            this.val = val;
        }
    }

    private static void levelSum(BinaryNode root, Map<Integer, Integer> result, int level) {
        if (root == null) {
            return;
        }
        int levelSum;
        if (result.containsKey(level)) {
            levelSum = result.get(level);
        } else {
            levelSum = 0;
        }

        levelSum += root.val;
        result.put(level, levelSum);

        levelSum(root.left, result, level + 1);
        levelSum(root.right, result, level + 1);
    }

    public static void main(String args[]) {
        BinaryNode level2Left1 = new BinaryNode(null, null, 4);
        BinaryNode level2Right1 = new BinaryNode(null, null, 5);
        BinaryNode level1Left = new BinaryNode(level2Left1, level2Right1, 2);

        BinaryNode level2Left2 = new BinaryNode(null, null, 1);
        BinaryNode level2Right2 = new BinaryNode(null, null, 2);
        BinaryNode level1Right = new BinaryNode(level2Left2, level2Right2, 3);

        BinaryNode root = new BinaryNode(level1Left, level1Right, 1);
        Map<Integer, Integer> result = new HashMap<Integer, Integer>();
        levelSum(root, result, 0);
        System.out.println(result.values());
    }
时间: 2024-07-30 22:16:34

计算二叉树每层的和的相关文章

计算二叉树的宽度的两种方式

二叉树作为一种很特殊的数据结构,功能上有很大的作用!今天就来看看怎么计算一个二叉树的最大的宽度吧. 采用递归方式 下面是代码内容: int GetMaxWidth(BinaryTree pointer){ int width[10];//加入这棵树的最大高度不超过10 int maxWidth=0; int floor=1; if(pointer){ if(floor==1){//如果访问的是根节点的话,第一层节点++; width[floor]++; floor++; if(pointer->

(7)计算二叉树的高度和结点数——3

通过使用后序遍历的方式计算二叉树的高度.可以先计算左子树的高度h1,后计算右子树的高度h2,树的高度h3. h3 = max (h1, h2) + 1 ; 二叉树的高度,也就是从根结点出发一直到叶结点的路径的长度. 因为在每种遍历方法中对每个结点都仅访问一次,所以可以在进行遍历时对结点的数目进行计算. --整理自<C/C++程序员面试宝典>

计算二叉树的深度,结点的个数。

//算法5.5 计算二叉树的深度,结点的个数. #include<iostream> using namespace std; //二叉树的二叉链表存储表示 typedef struct BiNode { char data; //结点数据域 struct BiNode *lchild,*rchild; //左右孩子指针 }BiTNode,*BiTree; //用算法5.3建立二叉链表 void CreateBiTree(BiTree &T) { //按先序次序输入二叉树中结点的值(一

leetCode题解之求二叉树每层的平均值

1.题目描述 Given a non-empty binary tree, return the average value of the nodes on each level in the form of an array. 计算二叉树每一层的节点的数据域的平均值. 2.题目分析 使用广度优先遍历方法,逐层对二叉树进行访问,求均值.使用一个队列数据结构完成对二叉树的访问,队列(queue)的特点是FIFO,即先进先出,queue的几种常用的方法是: queue::front()  :访问队首

C语言实现最大二叉树并按层遍历

题目:给定一个不含重复元素的整数数组.一个以此数组构建的最大二叉树定义如下: 二叉树的根是数组中的最大元素. 左子树是通过数组中最大值左边部分构造出的最大二叉树. 右子树是通过数组中最大值右边部分构造出的最大二叉树. 通过给定的数组构建最大二叉树,并且输出这个树的根节点. Example 1: 输入: [3,2,1,6,0,5] 输入: 返回下面这棵树的根节点: 6 / 3 5 \ / 2 0 1 分析:(1)通过审题可知通过先序创建二叉树进行创建,即创建根节点,左子树,右子数. 所以选择递归的

计算二叉树的大小

二叉树的大小是指树中存在的节点的数量.例如,下面这棵二叉树的大小是5. 我们定义 size(tree) 函数用来递归地计算二叉树 tree 的大小,它的工作原理如下 二叉树的大小 = 1 + 左子树的大小 + 右子树的大小 Algorithm: size(tree) 1. 如果 tree 为空,则返回0 2. 否者 (a) 通过递归地调用 size(tree.left) 获取左子树的大小 (a) 通过递归地调用 size(tree.right) 获取右子树的大小 (c) 用如下公式求出二叉树的大

LeetCode 637. 二叉树的层平均值(Average of Levels in Binary Tree)

637. 二叉树的层平均值 637. Average of Levels in Binary Tree LeetCode637. Average of Levels in Binary Tree 题目描述 给定一个非空二叉树, 返回一个由每层节点平均值组成的数组. 示例 1: 输入: 3 / 9 20 / 15 7 输出: [3, 14.5, 11] 解释: 第 0 层的平均值是 3,第 1 层是 14.5,第 2 层是 11.因此返回 [3, 14.5, 11]. 注意: 节点值的范围在32位

5.3.5 计算二叉树最大的宽度

方法一:利用遍历 #include<iostream> #include<cstdlib> #include<cstdio> using namespace std; typedef char TElemType; //二叉树的二叉链表存储表示 typedef struct BiNode { TElemType data; //结点数据域 struct BiNode *lchild, *rchild; //左右孩子指针 } BiTNode, *BiTree; void

二叉树按层打印,并且按层换行的方法

经常有一些是按层打印二叉树,这类问题的关键就在于,什么时候换行的问题. 这个问题在牛客网的讲解让我头很大,也不太懂.碰巧剑指offer里面有这个题,里面的解析就清楚明了多了. 首先构造一个队列,设置两个属性一个 nowline初始化为0,用来保存当前打印的行的还没被打印的元素个数. 设置另一个变量nextline变量用来保存下一行总共的元素个数,初始化为0. 以上图为例, 第一步:新建一个队列,设置nowline=1,nextline=0,. 第二步:将头结点的内容A加入到队列当中,这时从队列弹