使用 C++ 编程打印二叉树中每个结点的置位位数。


对于给定的二叉树,该函数将生成存储在结点中的键的二进制值,然后返回该二进制等价中置位位(1)的数量。

示例

键为 10 3 211 140 162 100 和 146 的二叉树

二进制等价置位位(输出)
1010102
300112
211110100115
140100011003
162101000103
10011001003
146100100103

这里我们使用函数 __builtin_popcount

该函数的原型如下所示:

int __builtin_popcount(unsigned int)

它返回给定数字(即二进制表示中 1 的个数)中置位位的数目。

算法

START
Step 1 -> create a structure of a node as
   struct Node
      struct node *left, *right
      int data
   End
Step 2 -> function to create a node
   node* newnode(int data)
   node->data = data
   node->left = node->right = NULL;
   return (node)
Step 3 -> Create function for generating bits of a node data
   void bits(Node* root)
   IF root = NULL
      return
   print __builtin_popcount(root->data)
   bits(root->left)
   bits(root->right)
step 4 -> In main()
   create tree using Node* root = newnode(10)
   root->left = newnode(3)
   call bits(root)
STOP

示例

 在线演示

#include <bits/stdc++.h>
using namespace std;
// structure of a node
struct Node {
   int data;
   struct Node *left, *right;
};
//function to create a new node
Node* newnode(int data) {
   Node* node = new Node;
   node->data = data;
   node->left = node->right = NULL;
   return (node);
}
//function for finding out the node
void bits(Node* root){
   if (root == NULL)
   return;
   //__builtin_popcount counts the number of set bit of a current node
   cout << "bits in node " << root->data << " = " <<__builtin_popcount(root->data)<< "\n";
   bits(root->left);
   bits(root->right);
}
int main(){
   Node* root = newnode(10);
   root->left = newnode(3);
   root->left->left = newnode(140);
   root->left->right = newnode(162);
   root->right = newnode(211);
   root->right->left = newnode(100);
   root->right->right = newnode(146);
   bits(root);
   return 0;
}

输出

如果我们运行上述程序,它将生成以下输出:

bits in node 10 = 2
bits in node 3 = 2
bits in node 140 = 3
bits in node 162 = 3
bits in node 211 = 5
bits in node 100 = 3
bits in node 146 = 3

更新于:2019-09-04

110 次浏览

あなたの キャリア をスタートさせましょう

コースを修了して認定を取得しましょう

開始
広告