📜  检查给定的 n 叉树是否为二叉树

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

检查给定的 n 叉树是否为二叉树

给定一个 n 叉树,任务是检查给定的树是否是二叉树。

例子:

Input: 
    A 
   / \  
  B   C
 / \   \
D   E   F
Output: Yes

Input: 
     A 
   / | \  
  B  C  D
         \
          F
Output: No

方法:二叉树中的每个节点最多可以有2个孩子。因此,对于给定树的每个节点,计算子节点的数量,如果任何节点的计数超过 2,则打印No else print Yes

下面是上述方法的实现:

C++
// C++ implementation of the approach
#include 
using namespace std;
 
// Structure of a node
// of an n-ary tree
struct Node {
    char key;
    vector child;
};
 
// Utility function to create
// a new tree node
Node* newNode(int key)
{
    Node* temp = new Node;
    temp->key = key;
    return temp;
}
 
// Function that returns true
// if the given tree is binary
bool isBinaryTree(struct Node* root)
{
 
    // Base case
    if (!root)
        return true;
 
    // Count will store the number of
    // children of the current node
    int count = 0;
    for (int i = 0; i < root->child.size(); i++) {
 
        // If any child of the current node doesn't
        // satisfy the condition of being
        // a binary tree node
        if (!isBinaryTree(root->child[i]))
            return false;
 
        // Increment the count of children
        count++;
 
        // If current node has more
        // than 2 children
        if (count > 2)
            return false;
    }
    return true;
}
 
// Driver code
int main()
{
    Node* root = newNode('A');
    (root->child).push_back(newNode('B'));
    (root->child).push_back(newNode('C'));
    (root->child[0]->child).push_back(newNode('D'));
    (root->child[0]->child).push_back(newNode('E'));
    (root->child[1]->child).push_back(newNode('F'));
 
    if (isBinaryTree(root))
        cout << "Yes";
    else
        cout << "No";
 
    return 0;
}


Java
// Java implementation of the approach
import java.util.*;
class GFG
{
 
// Structure of a node
// of an n-ary tree
static class Node
{
    int key;
    Vector child = new Vector();
};
 
// Utility function to create
// a new tree node
static Node newNode(int key)
{
    Node temp = new Node();
    temp.key = key;
    return temp;
}
 
// Function that returns true
// if the given tree is binary
static boolean isBinaryTree(Node root)
{
 
    // Base case
    if (root == null)
        return true;
 
    // Count will store the number of
    // children of the current node
    int count = 0;
    for (int i = 0; i < root.child.size(); i++)
    {
 
        // If any child of the current node doesn't
        // satisfy the condition of being
        // a binary tree node
        if (!isBinaryTree(root.child.get(i)))
            return false;
 
        // Increment the count of children
        count++;
 
        // If current node has more
        // than 2 children
        if (count > 2)
            return false;
    }
    return true;
}
 
// Driver code
public static void main(String[] args)
{
    Node root = newNode('A');
    (root.child).add(newNode('B'));
    (root.child).add(newNode('C'));
    (root.child.get(0).child).add(newNode('D'));
    (root.child.get(0).child).add(newNode('E'));
    (root.child.get(1).child).add(newNode('F'));
 
    if (isBinaryTree(root))
        System.out.println("Yes");
    else
        System.out.println("No");
}
}
 
// This code is contributed by PrinciRaj1992


C#
// C# implementation of the above approach
using System;
using System.Collections.Generic;
 
class GFG
{
 
// Structure of a node
// of an n-ary tree
public class Node
{
    public int key;
    public List child = new List();
};
 
// Utility function to create
// a new tree node
static Node newNode(int key)
{
    Node temp = new Node();
    temp.key = key;
    return temp;
}
 
// Function that returns true
// if the given tree is binary
static bool isBinaryTree(Node root)
{
 
    // Base case
    if (root == null)
        return true;
 
    // Count will store the number of
    // children of the current node
    int count = 0;
    for (int i = 0; i < root.child.Count; i++)
    {
 
        // If any child of the current node doesn't
        // satisfy the condition of being
        // a binary tree node
        if (!isBinaryTree(root.child[i]))
            return false;
 
        // Increment the count of children
        count++;
 
        // If current node has more
        // than 2 children
        if (count > 2)
            return false;
    }
    return true;
}
 
// Driver code
public static void Main(String[] args)
{
    Node root = newNode('A');
    (root.child).Add(newNode('B'));
    (root.child).Add(newNode('C'));
    (root.child[0].child).Add(newNode('D'));
    (root.child[0].child).Add(newNode('E'));
    (root.child[1].child).Add(newNode('F'));
 
    if (isBinaryTree(root))
        Console.WriteLine("Yes");
    else
        Console.WriteLine("No");
}
}
 
// This code is contributed by 29AjayKumar


Javascript


输出:
Yes