Altura del árbol binario considerando solo hojas de nivel par

Encuentre la altura del árbol binario dado que solo los Nodes en los niveles pares se consideran Nodes hoja válidos. 
La altura de un árbol binario es el número de aristas entre la raíz del árbol y su hoja más lejana. Pero, ¿y si damos un giro y cambiamos la definición de un Node hoja? Definamos un Node hoja válido como el Node que no tiene hijos y está en un nivel par (considerando el Node raíz como un Node de nivel impar). 

C++

/* Program to find height of the tree considering
   only even level leaves. */
#include <bits/stdc++.h>
using namespace std;
 
/* A binary tree node has data, pointer to
   left child and a pointer to right child */
struct Node {
    int data;
    struct Node* left;
    struct Node* right;
};
 
int heightOfTreeUtil(Node* root, bool isEven)
{
    // Base Case
    if (!root)
        return 0;
 
    if (!root->left && !root->right) {
        if (isEven)
            return 1;
        else
            return 0;
    }
 
    /*left stores the result of left subtree,
      and right stores the result of right subtree*/
    int left = heightOfTreeUtil(root->left, !isEven);
    int right = heightOfTreeUtil(root->right, !isEven);
 
    /*If both left and right returns 0, it means
      there is no valid path till leaf node*/
    if (left == 0 && right == 0)
        return 0;
 
    return (1 + max(left, right));
}
 
/* Helper function that allocates a new node with the
   given data and NULL left and right pointers. */
struct Node* newNode(int data)
{
    struct Node* node =
              (struct Node*)malloc(sizeof(struct Node));
    node->data = data;
    node->left = NULL;
    node->right = NULL;
 
    return (node);
}
 
int heightOfTree(Node* root)
{
    return heightOfTreeUtil(root, false);
}
 
/* Driver program to test above functions*/
int main()
{
    // Let us create binary tree shown in above diagram
    struct Node* root = newNode(1);
 
    root->left = newNode(2);
    root->right = newNode(3);
    root->left->left = newNode(4);
    root->left->right = newNode(5);
    root->left->right->left = newNode(6);
    cout << "Height of tree is " << heightOfTree(root);
    return 0;
}

Java

/* Java Program to find height of the tree considering
only even level leaves. */
class GfG {
 
/* A binary tree node has data, pointer to
left child and a pointer to right child */
static class Node {
    int data;
    Node left;
 Node right;
}
 
static int heightOfTreeUtil(Node root, boolean isEven)
{
    // Base Case
    if (root == null)
        return 0;
 
    if (root.left == null && root.right == null) {
        if (isEven == true)
            return 1;
        else
            return 0;
    }
 
    /*left stores the result of left subtree,
    and right stores the result of right subtree*/
    int left = heightOfTreeUtil(root.left, !isEven);
    int right = heightOfTreeUtil(root.right, !isEven);
 
    /*If both left and right returns 0, it means
    there is no valid path till leaf node*/
    if (left == 0 && right == 0)
        return 0;
 
    return (1 + Math.max(left, right));
}
 
/* Helper function that allocates a new node with the
given data and NULL left and right pointers. */
static Node newNode(int data)
{
    Node node = new Node();
    node.data = data;
    node.left = null;
    node.right = null;
 
    return (node);
}
 
static int heightOfTree(Node root)
{
    return heightOfTreeUtil(root, false);
}
 
/* Driver program to test above functions*/
public static void main(String[] args)
{
    // Let us create binary tree shown in above diagram
    Node root = newNode(1);
 
    root.left = newNode(2);
    root.right = newNode(3);
    root.left.left = newNode(4);
    root.left.right = newNode(5);
    root.left.right.left = newNode(6);
    System.out.println("Height of tree is " + heightOfTree(root));
}
}

Python3

# Program to find height of the tree considering
# only even level leaves.
 
# Helper class that allocates a new node with the
# given data and None left and right pointers.
class newNode:
    def __init__(self, data):
        self.data = data
        self.left = None
        self.right = None
 
def heightOfTreeUtil(root, isEven):
     
    # Base Case
    if (not root):
        return 0
 
    if (not root.left and not root.right):
        if (isEven):
            return 1
        else:
            return 0
 
    # left stores the result of left subtree,
    # and right stores the result of right subtree
    left = heightOfTreeUtil(root.left, not isEven)
    right = heightOfTreeUtil(root.right, not isEven)
 
    #If both left and right returns 0, it means
    # there is no valid path till leaf node
    if (left == 0 and right == 0):
        return 0
 
    return (1 + max(left, right))
 
def heightOfTree(root):
    return heightOfTreeUtil(root, False)
 
# Driver Code
if __name__ == '__main__':
     
    # Let us create binary tree shown
    # in above diagram
    root = newNode(1)
 
    root.left = newNode(2)
    root.right = newNode(3)
    root.left.left = newNode(4)
    root.left.right = newNode(5)
    root.left.right.left = newNode(6)
    print("Height of tree is",
           heightOfTree(root))
 
# This code is contributed by PranchalK

C#

/* C# Program to find height of the tree considering
only even level leaves. */
using System;
 
class GfG
{
 
    /* A binary tree node has data, pointer to
    left child and a pointer to right child */
    class Node
    {
        public int data;
        public Node left;
        public Node right;
    }
 
    static int heightOfTreeUtil(Node root,
                               bool isEven)
    {
        // Base Case
        if (root == null)
            return 0;
 
        if (root.left == null &&
            root.right == null)
        {
            if (isEven == true)
                return 1;
            else
                return 0;
        }
 
        /*left stores the result of left subtree,
        and right stores the result of right subtree*/
        int left = heightOfTreeUtil(root.left, !isEven);
        int right = heightOfTreeUtil(root.right, !isEven);
 
        /*If both left and right returns 0, it means
        there is no valid path till leaf node*/
        if (left == 0 && right == 0)
            return 0;
 
        return (1 + Math.Max(left, right));
    }
 
    /* Helper function that allocates a new node with the
    given data and NULL left and right pointers. */
    static Node newNode(int data)
    {
        Node node = new Node();
        node.data = data;
        node.left = null;
        node.right = null;
 
        return (node);
    }
 
    static int heightOfTree(Node root)
    {
        return heightOfTreeUtil(root, false);
    }
 
    /* Driver code*/
    public static void Main(String[] args)
    {
        // Let us create binary tree
        // shown in above diagram
        Node root = newNode(1);
 
        root.left = newNode(2);
        root.right = newNode(3);
        root.left.left = newNode(4);
        root.left.right = newNode(5);
        root.left.right.left = newNode(6);
        Console.WriteLine("Height of tree is " +
                            heightOfTree(root));
    }
}
 
/* This code is contributed by Rajput-Ji*/

Javascript

<script>
/* javascript Program to find height of the tree considering
only even level leaves. */
 
    /*
     * A binary tree node has data, pointer to left child and a pointer to right
     * child
     */
      
     class Node {
            constructor(val) {
                this.data = val;
                this.left = null;
                this.right = null;
            }
        }
 
    function heightOfTreeUtil(root,  isEven) {
        // Base Case
        if (root == null)
            return 0;
 
        if (root.left == null && root.right == null) {
            if (isEven == true)
                return 1;
            else
                return 0;
        }
 
        /*
         * left stores the result of left subtree, and right stores the result of right
         * subtree
         */
        var left = heightOfTreeUtil(root.left, !isEven);
        var right = heightOfTreeUtil(root.right, !isEven);
 
        /*
         * If both left and right returns 0, it means there is no valid path till leaf
         * node
         */
        if (left == 0 && right == 0)
            return 0;
 
        return (1 + Math.max(left, right));
    }
 
    /*
     * Helper function that allocates a new node with the given data and NULL left
     * and right pointers.
     */
    function newNode(data) {
var node = new Node();
        node.data = data;
        node.left = null;
        node.right = null;
 
        return (node);
    }
 
    function heightOfTree(root) {
        return heightOfTreeUtil(root, false);
    }
 
    /* Driver program to test above functions */
     
        // Let us create binary tree shown in above diagram
var root = newNode(1);
 
        root.left = newNode(2);
        root.right = newNode(3);
        root.left.left = newNode(4);
        root.left.right = newNode(5);
        root.left.right.left = newNode(6);
        document.write("Height of tree is " + heightOfTree(root));
 
// This code is contributed by umadevi9616
</script>

Publicación traducida automáticamente

Artículo escrito por Sahil_Bansall y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *