c - 从二叉搜索树中打印奇数级别的偶数计数
问题描述
我有一个二叉搜索树,我需要打印奇数级别的偶数值的总数。
我有一个算法可以按顺序进行遍历,但我不知道如何让它计算树的级别以了解给定的偶数值是否处于奇数级别。
中序算法
void printInOrder(Node *root)
{
if (root != NULL)
{
printInOrder(root->left);
printf("%d ", root->key);
printInOrder(root->right);
}
(级别计数从零开始,根所在的位置)
示例 1:
奇数级的偶数键数:2
示例 2:
奇数级的偶数键数:6
我真的迷路了,欢迎任何帮助。
解决方案
要打印奇数级别的偶数值的总数,您需要保留一个全局变量,该变量将存储偶数节点的计数。您需要按顺序遍历树,并且只遍历奇数节点的给定级别。我附上下面的代码片段。打印变量c
以获得所需的结果。
int c=0; // Maintain a global variable to keep count
int printLevelOrder()
{
int h = height(root);
for(int i=1;i<=h;i++) // i=1 -> level 0
{
if( (i-1)%2 != 0) // level start from 0 and height from 1. traverse only for odd levels
{
evenNode(root, i);
}
}
}
// fn to calculate the height of BST
int height(Node root)
{
if(root == null)
return 1;
else
{
int lheight = height(root.left);
int rheight = height(root.right);
if(lheight > rheight)
return lheight;
else
return rheight;
}
}
// traversing at a given level
void evenNode(Node root, int level)
{
if(root == null)
return ;
if(level ==1)
{
if(root.data %2 == 0) // check if bode is even then increase counter.
c++;
}
else if(level > 1)
{
evenNode(root.left , level -1);
evenNode(root.right, level - 1);
}
}
推荐阅读
- vb.net - String.Format() - 如何使用包含格式的变量?
- angular - 如何更改 Ionic 4 的 ion-range pin 字体和格式?
- java - 如何提高大型 JTable 的滚动性能?
- java - 多个 Xodus 应用程序访问/共享单个目录
- c# - Moq 对象总是返回 null ,为什么?
- sql-server - 如何创建短期和长期数据库目标
- java - 当 Holder 中发生某些事情时更新 RecyclerView
- vue.js - 刷新页面返回后的 Electron Vue:无法获取 /url
- git - Git - CAfile 的不寻常路径
- sql - SQL,GETDATE 在 where 子句中