Dado un árbol binario , la tarea es encontrar la suma de los Nodes del árbol binario que tienen solo los Nodes secundarios izquierdos.
Ejemplo:
Entrada: 8
/ \
3 7
/ \ /
5 6 0
//
1 2
Salida: 18 Explicación: Los Nodes con valores 5, 6 y 7 son los que tienen solo los Nodes secundarios izquierdosEntrada: 2
/ \
3 1
/ /
5 6
Salida: 4
Enfoque: El problema dado se puede resolver recorriendo el árbol binario utilizando postorder traversal . La idea es verificar si un Node contiene solo un Node secundario izquierdo y agregar el valor del Node actual a la respuesta si la condición es verdadera. Se pueden seguir los siguientes pasos para resolver el problema:
- Atraviesa el árbol binario usando el recorrido posorden
- Si la raíz es nula, devuelve 0
- Use la recursividad en el subárbol izquierdo y almacene su respuesta en una variable izquierda
- Use la recursividad en el subárbol derecho y almacene su respuesta en una variable a la derecha
- Si root.left != null && root.right == null, devolver el valor de root.val + left + right
- De lo contrario volver izquierda + derecha
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ code for the above approach #include <bits/stdc++.h> using namespace std; struct Node { int val; Node *left; Node *right; Node(int value) { val = value; left = NULL; right = NULL; } }; // Function to find the sum of nodes // having only left child node int sumLeftChild(Node *root) { if (root == NULL) return 0; // Sum of nodes having only left // child node from left subtree int left = sumLeftChild(root->left); // Sum of nodes having only left // child node from right subtree int right = sumLeftChild(root->right); // If current node has only left // child node return the sum from // left subtree + right // subtree + root->val if (root->left != NULL && root->right == NULL) { return root->val + left + right; } // Return the value from left // and right subtrees return left + right; } // Driver code int main() { // Initialize the tree Node *root = new Node(2); root->left = new Node(3); root->right = new Node(4); root->left->left = new Node(5); root->right->left = new Node(7); cout << (sumLeftChild(root)); return 0; } // This code is contributed by Potta Lokesh
Java
// Java implementation for the above approach import java.io.*; import java.util.*; class GFG { // Function to find the sum of nodes // having only left child node public static int sumLeftChild(Node root) { if (root == null) return 0; // Sum of nodes having only left // child node from left subtree int left = sumLeftChild(root.left); // Sum of nodes having only left // child node from right subtree int right = sumLeftChild(root.right); // If current node has only left // child node return the sum from // left subtree + right // subtree + root.val if (root.left != null && root.right == null) { return root.val + left + right; } // Return the value from left // and right subtrees return left + right; } // Driver code public static void main(String[] args) { // Initialize the tree Node root = new Node(2); root.left = new Node(3); root.right = new Node(4); root.left.left = new Node(5); root.right.left = new Node(7); System.out.println(sumLeftChild(root)); } static class Node { int val; Node left, right; public Node(int val) { this.val = val; } } }
C#
// C# implementation for the above approach using System; public class GFG { // Function to find the sum of nodes // having only left child node public static int sumLeftChild(Node root) { if (root == null) return 0; // Sum of nodes having only left // child node from left subtree int left = sumLeftChild(root.left); // Sum of nodes having only left // child node from right subtree int right = sumLeftChild(root.right); // If current node has only left // child node return the sum from // left subtree + right // subtree + root.val if (root.left != null && root.right == null) { return root.val + left + right; } // Return the value from left // and right subtrees return left + right; } // Driver code public static void Main(String[] args) { // Initialize the tree Node root = new Node(2); root.left = new Node(3); root.right = new Node(4); root.left.left = new Node(5); root.right.left = new Node(7); Console.WriteLine(sumLeftChild(root)); } public class Node { public int val; public Node left, right; public Node(int val) { this.val = val; } } } // This code is contributed by Rajput-Ji
Javascript
<script> // Javascript implementation for the above approach class Node { constructor(val) { this.val = val; this.left = null; this.right = null; } } // Function to find the sum of nodes // having only left child node function sumLeftChild(root) { if (root == null) return 0; // Sum of nodes having only left // child node from left subtree let left = sumLeftChild(root.left); // Sum of nodes having only left // child node from right subtree let right = sumLeftChild(root.right); // If current node has only left // child node return the sum from // left subtree + right // subtree + root.val if (root.left != null && root.right == null) { return root.val + left + right; } // Return the value from left // and right subtrees return left + right; } // Driver code // Initialize the tree let root = new Node(2); root.left = new Node(3); root.right = new Node(4); root.left.left = new Node(5); root.right.left = new Node(7); document.write(sumLeftChild(root)); // This code is contributed by saurabh_jaiswal. </script>
7
Complejidad temporal: O(N)
Espacio auxiliar: O(1)
Publicación traducida automáticamente
Artículo escrito por vishnuthulasidosss y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA