📌  相关文章
📜  打印二叉树的每个节点中设置的位数

📅  最后修改于: 2021-04-23 21:13:34             🧑  作者: Mango

给定二叉树。任务是在二叉树的每个节点中打印设置的位数。

想法是使用任何树遍历方法遍历给定的二叉树,并为每个节点计算设置的位数并打印出来。

注意:还可以使用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