📌  相关文章
📜  计算所有异或为奇数的相邻节点对

📅  最后修改于: 2022-05-13 01:57:17.480000             🧑  作者: Mango

计算所有异或为奇数的相邻节点对

给定一个二叉树,如下所示。任务是计算所有异或为奇数的相邻节点对。

说明

Initially, root will be 0, start traversing the tree.
XOR of 15 and 13 will be  2 (Even)
XOR of 13 and 12 will be 1 (Odd)
XOR of 13 and 14 will be 5 (Even)
XOR of 15 and 18 will be 13 (Odd)
XOR of 18 and 17 will be 3 (Odd)
XOR of 18 and 21 will be 7 (Odd)

Therefore, total adjacent pairs with odd XOR = 5

方法

  1. 开始从上到下遍历树。
  2. 每次对当前节点数据及其相邻数据进行异或运算。
  3. 如果两个节点的 XOR 都是奇数,则增加计数。

下面是上述方法的实现:

C++
// C++ program to find number of adjacent pair
// in Binary Tree with odd xor
 
#include 
using namespace std;
 
// Tree Node
struct Node {
    int data;
    struct Node *left, *right;
};
 
// Function to find number of adjacent pair
// in Binary Tree with odd xor
int countOddXor(Node* root, Node *parent=NULL)
{
    // If Node is empty
    if (root == NULL)
        return 0;
 
    // check pair of XOR is odd or not
    int res = 0;
    if (parent != NULL && (parent->data ^ root->data) % 2)
        res++;
 
    return res + countOddXor(root->left, root) +
                 countOddXor(root->right, root);
}
 
// Utility function to create a new tree node
Node* newNode(int data)
{
    Node* temp = new Node;
    temp->data = data;
    temp->left = NULL;
    temp->right = NULL;
    return temp;
}
 
// Driver code
int main()
{
    struct Node* root = NULL;
 
    root = newNode(15);
    root->left = newNode(13);
    root->left->left = newNode(12);
    root->left->right = newNode(14);
    root->right = newNode(18);
    root->right->left = newNode(17);
    root->right->right = newNode(21);
 
    printf("%d ", countOddXor(root));
 
    return 0;
}


Java
// Java program to find number of adjacent pair
// in Binary Tree with odd xor
class GFG
{
 
// Tree Node
static class Node
{
    int data;
    Node left, right;
};
 
// Function to find number of adjacent pair
// in Binary Tree with odd xor
static int countOddXor(Node root, Node parent)
{
    // If Node is empty
    if (root == null)
        return 0;
 
    // check pair of XOR is odd or not
    int res = 0;
    if (parent != null &&
       (parent.data ^ root.data) % 2 == 1)
        res++;
 
    return res + countOddXor(root.left, root) +
                 countOddXor(root.right, root);
}
 
// Utility function to create a new tree node
static Node newNode(int data)
{
    Node temp = new Node();
    temp.data = data;
    temp.left = null;
    temp.right = null;
    return temp;
}
 
// Driver code
public static void main(String[] args)
{
    Node root = null;
 
    root = newNode(15);
    root.left = newNode(13);
    root.left.left = newNode(12);
    root.left.right = newNode(14);
    root.right = newNode(18);
    root.right.left = newNode(17);
    root.right.right = newNode(21);
 
    System.out.printf("%d ", countOddXor(root, null));
}
}
 
// This code is contributed by PrinciRaj1992


Python3
# Python3 program to find number of adjacent pair
# in Binary Tree with odd xor
   
# Tree Node
class Node:
     
    def __init__(self, data):
         
        self.data = data
        self.left = None
        self.right = None
       
# Function to find number of adjacent pair
# in Binary Tree with odd xor
def countOddXor(root, parent = None):
     
    # If Node is empty
    if (root == None):
        return 0;
   
    # check pair of XOR is odd or not
    res = 0;
     
    if (parent != None and (parent.data ^ root.data) % 2):
        res += 1
   
    return res + countOddXor(root.left, root) + countOddXor(root.right, root);
   
# Utility function to create a new tree node
def newNode(data):
 
    temp = Node(data)
    return temp
   
# Driver code
if __name__=='__main__':
     
    root = None;
    root = newNode(15);
    root.left = newNode(13);
    root.left.left = newNode(12);
    root.left.right = newNode(14);
    root.right = newNode(18);
    root.right.left = newNode(17);
    root.right.right = newNode(21);
         
    print(countOddXor(root));
   
# This code is contributed by rutvik_56


C#
// C# program to find number of adjacent pair
// in Binary Tree with odd xor
using System;
 
class GFG
{
 
// Tree Node
public class Node
{
    public int data;
    public Node left, right;
};
 
// Function to find number of adjacent pair
// in Binary Tree with odd xor
static int countOddXor(Node root,
                       Node parent)
{
    // If Node is empty
    if (root == null)
        return 0;
 
    // check pair of XOR is odd or not
    int res = 0;
    if (parent != null &&
       (parent.data ^ root.data) % 2 == 1)
        res++;
 
    return res + countOddXor(root.left, root) +
                 countOddXor(root.right, root);
}
 
// Utility function to create a new tree node
static Node newNode(int data)
{
    Node temp = new Node();
    temp.data = data;
    temp.left = null;
    temp.right = null;
    return temp;
}
 
// Driver code
public static void Main(String[] args)
{
    Node root = null;
 
    root = newNode(15);
    root.left = newNode(13);
    root.left.left = newNode(12);
    root.left.right = newNode(14);
    root.right = newNode(18);
    root.right.left = newNode(17);
    root.right.right = newNode(21);
 
    Console.WriteLine("{0} ",
          countOddXor(root, null));
}
}
 
// This code is contributed by 29AjayKumar


Javascript


输出:
5