Inclinación del árbol binario

Dado un árbol binario, devuelve la inclinación de todo el árbol. La inclinación de un Node de árbol se define como la diferencia absoluta entre la suma de todos los valores del Node del subárbol izquierdo y la suma de todos los valores del Node del subárbol derecho. A los Nodes nulos se les asigna una inclinación de cero. Por lo tanto, la inclinación de todo el árbol se define como la suma de la inclinación de todos los Nodes.
Ejemplos: 
 

Input :
    1
   / \
  2   3
Output : 1
Explanation: 
Tilt of node 2 : 0
Tilt of node 3 : 0
Tilt of node 1 : |2-3| = 1
Tilt of binary tree : 0 + 0 + 1 = 1

Input :
    4
   / \
  2   9
 / \   \
3   5   7
Output : 15
Explanation: 
Tilt of node 3 : 0
Tilt of node 5 : 0
Tilt of node 7 : 0
Tilt of node 2 : |3-5| = 2
Tilt of node 9 : |0-7| = 7
Tilt of node 4 : |(3+5+2)-(9+7)| = 6
Tilt of binary tree : 0 + 0 + 0 + 2 + 7 + 6 = 15

C++

// CPP Program to find Tilt of Binary Tree
#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 val;
    struct Node *left, *right;
};
  
/* Recursive function to calculate Tilt of
  whole tree */
int traverse(Node* root, int* tilt)
{
    if (!root)
        return 0;
  
    // Compute tilts of left and right subtrees
    // and find sums of left and right subtrees
    int left = traverse(root->left, tilt);
    int right = traverse(root->right, tilt); 
  
    // Add current tilt to overall
    *tilt += abs(left - right);
  
    // Returns sum of nodes under current tree
    return left + right + root->val;
}
  
/* Driver function to print Tilt of whole tree */
int Tilt(Node* root)
{
    int tilt = 0;
    traverse(root, &tilt);
    return tilt;
}
  
/* Helper function that allocates a
new node with the given data and
NULL left and right pointers. */
Node* newNode(int data)
{
    Node* temp = new Node;
    temp->val = data;
    temp->left = temp->right = NULL;
    return temp;
}
  
// Driver code
int main()
{
    /* Let us construct a Binary Tree
        4
       / \
      2   9
     / \   \
    3   5   7 */
  
    Node* root = NULL;
    root = newNode(4);
    root->left = newNode(2);
    root->right = newNode(9);
    root->left->left = newNode(3);
    root->left->right = newNode(8);
    root->right->right = newNode(7);
    cout << "The Tilt of whole tree is " << Tilt(root);
    return 0;
}

Java

// Java Program to find Tilt of Binary Tree 
import java.util.*;
class GfG {
  
/* A binary tree node has data, pointer to 
left child and a pointer to right child */
static class Node { 
    int val; 
    Node left, right; 
}
  
/* Recursive function to calculate Tilt of 
whole tree */
static class T{
    int tilt = 0;
}
static int traverse(Node root, T t ) 
{ 
    if (root == null) 
        return 0; 
  
    // Compute tilts of left and right subtrees 
    // and find sums of left and right subtrees 
    int left = traverse(root.left, t); 
    int right = traverse(root.right, t); 
  
    // Add current tilt to overall 
    t.tilt += Math.abs(left - right); 
  
    // Returns sum of nodes under current tree 
    return left + right + root.val; 
} 
  
/* Driver function to print Tilt of whole tree */
static int Tilt(Node root) 
{ 
    T t = new T(); 
    traverse(root, t); 
    return t.tilt; 
} 
  
/* Helper function that allocates a 
new node with the given data and 
NULL left and right pointers. */
static Node newNode(int data) 
{ 
    Node temp = new Node(); 
    temp.val = data; 
    temp.left = null;
    temp.right = null; 
    return temp; 
} 
  
// Driver code 
public static void main(String[] args) 
{ 
    /* Let us construct a Binary Tree 
        4 
    / \ 
    2 9 
    / \ \ 
    3 5 7 */
  
    Node root = null; 
    root = newNode(4); 
    root.left = newNode(2); 
    root.right = newNode(9); 
    root.left.left = newNode(3); 
    root.left.right = newNode(8); 
    root.right.right = newNode(7); 
    System.out.println("The Tilt of whole tree is " + Tilt(root)); 
}
} 

Python3

# Python3 Program to find Tilt of 
# Binary Tree 
  
# class that allocates a new node 
# with the given data and 
# None left and right pointers. 
class newNode:
    def __init__(self, data):
        self.val = data 
        self.left = self.right = None
  
# Recursive function to calculate
# Tilt of whole tree 
def traverse(root, tilt):
    if (not root): 
        return 0
  
    # Compute tilts of left and right subtrees 
    # and find sums of left and right subtrees 
    left = traverse(root.left, tilt) 
    right = traverse(root.right, tilt) 
  
    # Add current tilt to overall 
    tilt[0] += abs(left - right) 
  
    # Returns sum of nodes under 
    # current tree 
    return left + right + root.val
  
# Driver function to print Tilt
# of whole tree 
def Tilt(root):
    tilt = [0]
    traverse(root, tilt) 
    return tilt[0]
  
# Driver code 
if __name__ == '__main__':
      
    # Let us construct a Binary Tree 
    #     4 
    # / \ 
    # 2 9 
    # / \ \ 
    # 3 5 7 
    root = None
    root = newNode(4) 
    root.left = newNode(2) 
    root.right = newNode(9) 
    root.left.left = newNode(3) 
    root.left.right = newNode(8) 
    root.right.right = newNode(7) 
    print("The Tilt of whole tree is", 
                           Tilt(root))
  
# This code is contributed by PranchalK

C#

// C# Program to find Tilt of Binary Tree 
using System;
  
class GfG 
{
  
/* A binary tree node has data, pointer to 
left child and a pointer to right child */
public class Node 
{ 
    public int val; 
    public Node left, right; 
}
  
/* Recursive function to calculate Tilt of 
whole tree */
public class T
{
    public int tilt = 0;
}
static int traverse(Node root, T t ) 
{ 
    if (root == null) 
        return 0; 
  
    // Compute tilts of left and right subtrees 
    // and find sums of left and right subtrees 
    int left = traverse(root.left, t); 
    int right = traverse(root.right, t); 
  
    // Add current tilt to overall 
    t.tilt += Math.Abs(left - right); 
  
    // Returns sum of nodes under current tree 
    return left + right + root.val; 
} 
  
/* Driver function to print Tilt of whole tree */
static int Tilt(Node root) 
{ 
    T t = new T(); 
    traverse(root, t); 
    return t.tilt; 
} 
  
/* Helper function that allocates a 
new node with the given data and 
NULL left and right pointers. */
static Node newNode(int data) 
{ 
    Node temp = new Node(); 
    temp.val = data; 
    temp.left = null;
    temp.right = null; 
    return temp; 
} 
  
// Driver code 
public static void Main(String[] args) 
{ 
    /* Let us construct a Binary Tree 
        4 
    / \ 
    2 9 
    / \ \ 
    3 5 7 */
  
    Node root = null; 
    root = newNode(4); 
    root.left = newNode(2); 
    root.right = newNode(9); 
    root.left.left = newNode(3); 
    root.left.right = newNode(8); 
    root.right.right = newNode(7); 
    Console.WriteLine("The Tilt of whole tree is " + Tilt(root)); 
}
}
  
// This code contributed by Rajput-Ji

Javascript

<script>
  
    // JavaScript Program to find Tilt of Binary Tree 
      
    /* A binary tree node has data, pointer to 
    left child and a pointer to right child */
    class Node
    {
        constructor(data) {
           this.left = null;
           this.right = null;
           this.val = data;
        }
    }
  
    /* Recursive function to calculate Tilt of 
    whole tree */
      let tilt = 0;
      
    function traverse(root) 
    { 
        if (root == null) 
            return 0; 
  
        // Compute tilts of left and right subtrees 
        // and find sums of left and right subtrees 
        let left = traverse(root.left, tilt); 
        let right = traverse(root.right, tilt); 
  
        // Add current tilt to overall 
        tilt += Math.abs(left - right); 
  
        // Returns sum of nodes under current tree 
        return left + right + root.val; 
    } 
  
    /* Driver function to print Tilt of whole tree */
    function Tilt(root) 
    { 
        traverse(root); 
        return tilt; 
    } 
  
    /* Helper function that allocates a 
    new node with the given data and 
    NULL left and right pointers. */
    function newNode(data) 
    { 
        let temp = new Node(data);
        return temp; 
    } 
      
    /* Let us construct a Binary Tree 
        4 
    / \ 
    2 9 
    / \ \ 
    3 5 7 */
    
    let root = null; 
    root = newNode(4); 
    root.left = newNode(2); 
    root.right = newNode(9); 
    root.left.left = newNode(3); 
    root.left.right = newNode(8); 
    root.right.right = newNode(7); 
    document.write("The Tilt of whole tree is " + Tilt(root));
    
</script>

Publicación traducida automáticamente

Artículo escrito por Pal13 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 *