给定二叉树。任务是在二叉树的每个节点中打印设置的位数。
想法是使用任何树遍历方法遍历给定的二叉树,并为每个节点计算设置的位数并打印出来。
注意:还可以使用C++中提供的__builtin_popcount()函数直接计算整数中设置的位数。
下面是上述方法的实现:
C++
// CPP program to print the number of set bits
// in each node of the binary tree
#include
using namespace std;
// Binary Tree node
struct Node {
int data;
struct Node *left, *right;
};
// Utility function that allocates a new Node
Node* newNode(int data)
{
Node* node = new Node;
node->data = data;
node->left = node->right = NULL;
return (node);
}
// Function to print the number of set bits
// in each node of the binary tree
void printSetBit(Node* root)
{
if (root == NULL)
return;
// Print the number of set bits of
// current node using __builtin_popcount()
cout << "Set bits in Node " << root->data << " = " <<
__builtin_popcount(root->data) << "\n";
// Traverse Left Subtree
printSetBit(root->left);
// Traverse Right Subtree
printSetBit(root->right);
}
// Driver code
int main()
{
Node* root = newNode(16);
root->left = newNode(13);
root->left->left = newNode(14);
root->left->right = newNode(12);
root->right = newNode(11);
root->right->left = newNode(10);
root->right->right = newNode(16);
printSetBit(root);
return 0;
}
Java
// Java program to print the number of set bits
// in each node of the binary tree
import java.util.*;
class GFG
{
// Binary Tree node
static class Node
{
int data;
Node left, right;
};
// Utility function that allocates a new Node
static Node newNode(int data)
{
Node node = new Node();
node.data = data;
node.left = node.right = null;
return (node);
}
// Function to print the number of set bits
// in each node of the binary tree
static void printSetBit(Node root)
{
if (root == null)
return;
// Print the number of set bits of
// current node using __builtin_popcount()
System.out.print("Set bits in Node " + root.data + " = " +
Integer.bitCount(root.data) + "\n");
// Traverse Left Subtree
printSetBit(root.left);
// Traverse Right Subtree
printSetBit(root.right);
}
// Driver code
public static void main(String[] args)
{
Node root = newNode(16);
root.left = newNode(13);
root.left.left = newNode(14);
root.left.right = newNode(12);
root.right = newNode(11);
root.right.left = newNode(10);
root.right.right = newNode(16);
printSetBit(root);
}
}
// This code is contributed by PrinciRaj1992
Python3
# Python3 program to print the number of set bits
# in each node of the binary tree
# Binary Tree node
class Node:
def __init__(self):
self.data = None
self.left = None
self.right = None
# Utility function that allocates a new Node
def newNode(data):
node = Node()
node.data = data
node.left = None
node.right = None
return node
# Function to print the number of set bits
# in each node of the binary tree
def printSetBit(root: Node):
if root is None:
return
# Print the number of set bits of
# current node using count()
print("Set bits in Node %d = %d" %
(root.data, bin(root.data).count('1')))
# Traverse Left Subtree
printSetBit(root.left)
# Traverse Right Subtree
printSetBit(root.right)
# Driver Code
if __name__ == "__main__":
root = newNode(16)
root.left = newNode(13)
root.left.left = newNode(14)
root.left.right = newNode(12)
root.right = newNode(11)
root.right.left = newNode(10)
root.right.right = newNode(16)
printSetBit(root)
# This code is contributed by
# sanjeev2552
C#
// C# program to print the number of set bits
// in each node of the binary tree
using System;
class GFG
{
// Binary Tree node
public class Node
{
public int data;
public Node left, right;
};
// Utility function that allocates a new Node
static Node newNode(int data)
{
Node node = new Node();
node.data = data;
node.left = node.right = null;
return (node);
}
// Function to print the number of set bits
// in each node of the binary tree
static void printSetBit(Node root)
{
if (root == null)
return;
// Print the number of set bits of
// current node using __builtin_popcount()
Console.Write("Set bits in Node " + root.data +
" = " + bitCount(root.data) + "\n");
// Traverse Left Subtree
printSetBit(root.left);
// Traverse Right Subtree
printSetBit(root.right);
}
static int bitCount(int x)
{
int setBits = 0;
while (x != 0)
{
x = x & (x - 1);
setBits++;
}
return setBits;
}
// Driver code
public static void Main(String[] args)
{
Node root = newNode(16);
root.left = newNode(13);
root.left.left = newNode(14);
root.left.right = newNode(12);
root.right = newNode(11);
root.right.left = newNode(10);
root.right.right = newNode(16);
printSetBit(root);
}
}
// This code is contributed by 29AjayKumar
输出:
Set bits in Node 16 = 1
Set bits in Node 13 = 3
Set bits in Node 14 = 3
Set bits in Node 12 = 2
Set bits in Node 11 = 3
Set bits in Node 10 = 2
Set bits in Node 16 = 1