二叉树 奇偶行输出方向相反

Problem statement:

问题陈述:

Given a Binary Tree, write a function getLevelDiff which returns the difference between the sum of nodes at odd level and the sum of nodes at even level. The function getLevelDiff takes only one argument, i.e., the root of the binary tree.

给定一个二叉树,编写一个函数getLevelDiff ,该函数返回奇数级的节点总数与偶数级的节点总数之差 。 函数getLevelDiff仅接受一个参数,即二叉树的根。

Solution

Example:

例:

 3
/ \
4  6

for, the above tree the odd level sum is 3 (root itself) and even level sum is 10 (leaf nodes here) thus the difference is 3-10=-7

因为上面的树的奇数级总和是3(根本身),偶数级总和是10(此处是叶节点),所以差是3-10 = -7

Algorithm:

算法:

We solve the problem with help of level order traversal.

我们借助级别顺序遍历来解决该问题。

Function getLevelDiff( Node* root)

函数getLevelDiff(Node * root)

1. Initialize two flags, one for even level & other for odd levels.

1.初始化两个标志,一个标志为偶数级,另一个标志为奇数级。

flago=flag for odd levels
flage=flag for even levels
flago=1,flag e=0

falgo is initialized to 1 because we are starting with root which is considered to be odd level.

falgo初始化为1,因为我们从被认为是奇数级的root开始。

2. Initialize two variables, one to store sum of all odd levels & other to store sum of all even levels.

2.初始化两个变量,一个变量存储所有奇数级的和,另一个变量存储所有偶数级的和。

sumo = variable to store sums of all nodes at odd levels
sume = variable to store sums of all nodes at even levels
sumo = 0, sume =0 (initialized)

3. Do a level order traversal being conscious about current level whether odd or even. We can do this using the flags. When flage=1 and flago=0 we are at an even level. So we add the traversed node values with sume. When flago=1 and flage=0 we are at an odd level. So we add the traversed node values with sumo.

3.进行水平顺序遍历时要注意当前水平(奇数或偶数)。 我们可以使用标志来做到这一点。 当flage = 1和flago = 0时,我们处于同一水平。 因此,我们将遍历的节点值与sume相加。 当flago = 1且flage = 0时,我们处于奇数水平。 因此,我们将遍历的节点值与sumo相加。

We every time push NULL at end of each level & swap values between the flags at end of each level. For example when root is processed (odd level) & we encounter a NULL, we change flage from 0 to 1, flago from 1 to 0 as we are gong to process a even level now
Finally we achieve both the sums.

我们每次在每个级别末尾推送NULL并在每个级别末尾的标志之间交换值。 例如,当根被处理(奇数级)并且遇到NULL时,我们将flage从0更改为1,将flago从1更改为0,因为我们现在正在处理偶数级
最后,我们实现了两个总和。

4. Return sumo-sume

4.返回相加

Pseudo code:

伪代码:

//initialization
flage=0,flago=1;
queueq; //queue for level order traversal
sume=0,sumo=0;
Node* temp;
EnQueue(q,root);
EnQueue(q,NULL);
While (q is not empty){
temp =DeQueue(q);
IF(temp==NULL){
IF(q is not empty){
EnQueue(q,NULL);
}
//change flags
IF(flago){
flage=1;
flago=0;
}
ELSE{
flago=1;
flage=0;
}
}
ELSE{
IF(flage) //at even level
sume+=temp->data;
IF(flago) //at odd level
sumo+=temp->data;
IF(temp->left)
EnQueue(q, temp->left);
IF(temp->right)
EnQueue(q, temp->right);
}
}
return sumo-sume;
.minHeight{ min-height: 250px; } @media (min-width: 1025px){ .minHeight{ min-height: 90px; } } .minHeight{ min-height: 250px; } @media (min-width: 1025px){ .minHeight{ min-height: 90px; } }

C++ implementation

C ++实现

#include <bits/stdc++.h>
using namespace std;
class Node{public:
int data;           //value
Node *left;    //pointer to left child
Node *right;   //pointer to right child
};
// creating new node
Node* newnode(int data)
{
Node* node = (Node*)malloc(sizeof(Node));
node->data = data;
node->left = NULL;
node->right = NULL;
return(node);
}
int getLevelDiff(Node *root)
{//Your code here
int flage=0,flago=1;
queue<Node*> q;
int sume=0,sumo=0;
Node* temp;
q.push(root);
q.push(NULL);
while(!q.empty()){temp=q.front();
q.pop();
if(temp==NULL){if(!q.empty()){q.push(NULL);
}
if(flago){flage=1;
flago=0;
}
else{flago=1;
flage=0;
}
}
else{if(flage)
sume+=temp->data;
if(flago)
sumo+=temp->data;
if(temp->left)
q.push(temp->left);
if(temp->right)
q.push(temp->right);
}
}
return sumo-sume;
}
int main(){cout<<"tree is built as per example\n";
Node *root=newnode(1);
root->left= newnode(2);
root->right= newnode(2);
root->right->right=newnode(3);
root->right->left=newnode(4);
root->left->left=newnode(3);
root->left->right=newnode(4);
cout<<"difference between odd & even levels: "<<getLevelDiff(root)<<endl;
return 0;
}

Output

输出量

tree is built as per example
difference between odd & even level: 11

Example with explanation

带说明的例子

Let the tree be,
1
/   \
2     2
/ \   / \
3   4 4   3
So the odd levels’ sum is = 1+14=15
Even level’s sum is = 4
So the difference is: 11
---------------------------------------------------------
At level 1:
It's odd level
1 is processed
current odd level sum:1
---------------------------------------------------------
At level 2:
It’s even level
2 is processed
current even level sum:2
2 is processed
current even level sum:4
---------------------------------------------------------
At level 3:
It’s odd level
3 is processed
current odd level sum:4
4 is processed
current odd level sum:8
4 is processed
current odd level sum:12
3 is processed
current odd level sum:15
---------------------------------------------------------
Traversal ends
Finally,
Odd level sum=15
Even level sum=4
Difference =15-4=11

翻译自: https://www.includehelp.com/icp/odd-even-level-difference-in-a-binary-tree.aspx

二叉树 奇偶行输出方向相反

二叉树 奇偶行输出方向相反_二叉树中的奇偶级差相关推荐

  1. 向量的方向余弦公式_定位中方向余弦矩阵(DCM)简介

    1   前言 这篇文章是翻译Starlino_DCM_Tutorial.pdf而来, 链接为:http://www.starlino.com/dcm_tutorial.html 这篇文章主要是介绍无人 ...

  2. x轴z轴代表的方向图片_游戏中到底是Z轴朝上还是Y轴朝上?

    本文转自我的公众号--游戏开发那些事 在谈到游戏世界中的坐标轴时,我们经常会看到这样的争论. "游戏中Y轴是向上的好么?这你都不知道?" "不对,空间直角坐标系不就是Z轴 ...

  3. python程序命令行输出记录到log文件中

    $ python xxx.py args1 >> data/log.txt第一条命令的含义是:将xxx.py这个python文件中print()原本输出到console的内容重定向到&qu ...

  4. 输出四位完全平方数_完全平方数中的规律

    PS:很近之前自己收集的资料 一个正整数如果是另一个整数的完全平方,那么我们就称这个数为完全平方数,也叫做平方数. 如:0,1,4,9,16,25,36,49,64,81,100,121,144,16 ...

  5. 中的多行卡片如何居中_编程中如何让图片垂直居中?两种方案分享给大家

    flex方法 首先给图片添加一个div,设置其宽高及基本属性,其次把div中的display元素设置成flex,最后给img添加align-items:center属性,代码如下: Document ...

  6. 树(二叉树层次遍历输出及二叉树前序遍历输入)

    前两篇解释了二叉树的有关逻辑概念及前中后序输出递归代码的实现,这篇将讲述二叉树层次遍历输出如何实现以及二叉树前序遍历输入的两种情况. 定义结构体 struct BiNode{char data;BiN ...

  7. 数据结构与算法_二叉树遍历

    文章目录 0. 前言 0.1 二叉树的结构体 1.二叉树的遍历 1.1 二叉树前序遍历(根→左→右) 1.2 二叉树的中序遍历(左-根-右) 1.3 后序遍历(左-右-根) 1.4 二叉树层序遍历结果 ...

  8. EasyExcel做导出报表时的奇偶行、自动换行设置

    [问题来源] 我们设定了奇偶行后,可能要给一个自己喜欢的颜色,如果是用的easyExcel,那我们可能要绕点弯 [放松下] 如果你在为数不多的easyExcel案例和论坛的贴子花费了很多时间, 去解决 ...

  9. 一棵二叉树的中根线索二叉树_二叉树面试题刷题模板(终极版)

    树结构 二叉树的最大深度 后序递归 二叉树最小深度 后序递归 二叉树的直径 后序递归 平衡二叉树 后序递归 小总结 对称的二叉树 递归解法 二叉树的镜像 后序递归 树的子结构 递归解法 二叉搜索树的最 ...

最新文章

  1. 【shell】删除重复文件
  2. php 上万关键字匹配,JavaScript 上万关键字瞬间匹配实现代码
  3. 全球及中国益生菌市场应用发展与投资前景调研报告2022版
  4. CF650E-Clockwork Bomb【并查集】
  5. 计算机组网配置,计算机组网技术与配置教案..doc
  6. NumPy快速入门--复制/视图/深拷贝
  7. 实现类的多态性,方法的重写和重载
  8. MyBatis -- 对表进行增删改查(基于注解的实现)
  9. python finally语句里面出现异常_python try except语句出现异常
  10. pageHelper 分页插件使用
  11. Java集合框架知识点
  12. 发那科FANUC系统选项U盘,可以随意添加机器人选项
  13. PLC 控制三相异步电动机正反转实验
  14. 硕士毕业论文的致谢怎么写
  15. magicboook锐龙版(256G SSD)装deepin15.8(昨天发布,貌似支持AMD的vege显卡,R5 2500U)
  16. 计算机网络语音传输杂音回音,电脑使用麦克风有杂音的解决方法-电脑自学网...
  17. 联邦滤波算法封装Matlab函数
  18. veket linux安装到硬盘,安装veket到移动硬盘NTFS分区
  19. ECCV 2022|文本图像分析领域再起波澜,波士顿大学联合MIT和谷歌提出全新多模态新闻数据集NewsStories
  20. 云端智创 | 聚焦云剪辑核心,一文详述智能生产全链路

热门文章

  1. Java两个list合并取交集
  2. VTK系列教程六:多平面重建
  3. 老学姐2021年数字IC秋招复盘
  4. C# .NET 7.0和Framework 4.8两个框架的区别
  5. 支付开发,不得不了解的国内、国际第三方支付流程
  6. 2018年贝壳网校招(秋招)算法笔试编程题
  7. 选择性粘贴更改html格式,选择性粘贴这二个逆天的技巧你肯定不知道!
  8. 阿里天池Python训练营task03
  9. 如何从数据库安装包中查看数据库的小版本(非主流查看法)
  10. Unity中的UGUI源码解析之事件系统(6)-RayCaster(下)