Tilt of Binary Tree

30 Jun, 2021
Given a binary tree, return the tilt of the whole tree. The tilt of a tree node is defined as the absolute difference between the sum of all left subtree node values and the sum of all right subtree node values. Null nodes are assigned tilt to be zero. Therefore, tilt of the whole tree is defined as the sum of all nodes’ tilt.Examples:  
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
 
The idea is to recursively traverse tree. While traversing, we keep track of two things, sum of subtree rooted under current node, tilt of current node. Sum is needed to compute tilt of parent.  
C++
Java
Python3
C#
Javascript
// CPP Program to find Tilt of Binary Tree#include <bits/stdc++.h>using namespace std; /* A binary tree node has data, pointer toleft 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 anew node with the given data andNULL left and right pointers. */Node* newNode(int data){    Node* temp = new Node;    temp->val = data;    temp->left = temp->right = NULL;    return temp;} // Driver codeint 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 Program to find Tilt of Binary Treeimport java.util.*;class GfG { /* A binary tree node has data, pointer toleft child and a pointer to right child */static class Node {    int val;    Node left, right;} /* Recursive function to calculate Tilt ofwhole 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 anew node with the given data andNULL 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 codepublic 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 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 treedef 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 treedef Tilt(root):    tilt = [0]    traverse(root, tilt)    return tilt[0] # Driver codeif __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# Program to find Tilt of Binary Treeusing System; class GfG{ /* A binary tree node has data, pointer toleft child and a pointer to right child */public class Node{    public int val;    public Node left, right;} /* Recursive function to calculate Tilt ofwhole 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 anew node with the given data andNULL 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 codepublic 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
<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>
Output:  
Chapters
descriptions off, selected
captions settings, opens captions settings dialog
captions off, selected
English
This is a modal window.
Beginning of dialog window. Escape will cancel and close the window.
End of dialog window.
The Tilt of whole tree is 15
Complexity Analysis:  
Time complexity: O(n), where n is the number of nodes in binary tree.
Auxiliary Space: O(n) as in worst case, depth of binary tree will be n.
 
Python Programming Tutorial | Count number of vowels using sets in given string | GeeksforGeeks - YouTubeGeeksforGeeks529K subscribersPython Programming Tutorial | Count number of vowels using sets in given string | GeeksforGeeksWatch laterShareCopy linkInfoShoppingTap to unmuteIf playback doesn't begin shortly, try restarting your device.You're signed outVideos you watch may be added to the TV's watch history and influence TV recommendations. To avoid this, cancel and sign in to YouTube on your computer.CancelConfirmMore videosMore videosSwitch cameraShareInclude playlistAn error occurred while retrieving sharing information. Please try again later.Watch on0:000:000:00 / 2:07•Live•<div class="player-unavailable"><h1 class="message">An error occurred.</h1><div class="submessage"><a href="https://www.youtube.com/watch?v=LO7R3SNU6Vk" target="_blank">Try watching this video on www.youtube.com</a>, or enable JavaScript if it is disabled in your browser.</div></div>
 
prerna saini
PranchalKatiyar
Rajput-Ji
mukesh07
Tree
Tree
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Introduction to Data Structures
Introduction to Tree Data Structure
What is Data Structure: Types, Classifications and Applications
Diagonal Traversal of Binary Tree
Top 50 Tree Coding Problems for Interviews
Overview of Data Structures | Set 2 (Binary Tree, BST, Heap and Hash)
Iterative Preorder Traversal
Lowest Common Ancestor in a Binary Search Tree.
Boundary Traversal of binary tree
Handshaking Lemma and Interesting Tree Properties