Вывести все листовые узлы двоичного дерева справа налево
Опубликовано: 23 Января, 2022
Учитывая двоичное дерево, задача состоит в том, чтобы распечатать все листовые узлы двоичного дерева справа налево.
Примеры:
Вход :
1
/
2 3
/ /
4 5 6 7
Выход: 7 6 5 4
Вход :
1
/
2 3
/
4 5 6
/ /
7 8 9
Выход: 9 8 7 4
Рекомендуется: сначала попробуйте свой подход в {IDE}, прежде чем переходить к решению.
Рекурсивный подход: просмотрите дерево в режиме предварительного заказа, сначала обработав корень, затем правое поддерево, а затем левое поддерево, и выполните следующие действия:
- Убедитесь, что корень равен нулю, а затем вернитесь из функции.
- Если это листовой узел, распечатайте его.
- Если нет, то проверьте, есть ли у него правый дочерний элемент, если да, то вызовите функцию для правого дочернего элемента узла рекурсивно.
- Проверьте, оставил ли он дочерний элемент, если да, то вызовите функцию для левого дочернего элемента узла рекурсивно.
Below is the implementation of the above approach:
C++
// C++ program to print leaf nodes from right to left #include <iostream>using namespace std; // A Binary Tree Nodestruct Node { int data; struct Node *left, *right;}; // Utility function to create a new tree nodeNode* newNode(int data){ Node* temp = new Node; temp->data = data; temp->left = temp->right = NULL; return temp;} // Function to print leaf// nodes from right to leftvoid printLeafNodes(Node* root){ // If node is null, return if (!root) return; // If node is leaf node, print its data if (!root->left && !root->right) { cout << root->data << " "; return; } // If right child exists, check for leaf // recursively if (root->right) printLeafNodes(root->right); // If left child exists, check for leaf // recursively if (root->left) printLeafNodes(root->left);} // Driver codeint main(){ Node* root = newNode(1); root->left = newNode(2); root->right = newNode(3); root->left->left = newNode(4); root->left->right = newNode(5); root->right->left = newNode(6); root->right->right = newNode(7); root->left->left->left = newNode(8); root->right->right->left = newNode(9); root->left->left->left->right = newNode(10); printLeafNodes(root); return 0;} |
Java
// Java program to print leaf nodes from right to left import java.util.*; class GFG{ // A Binary Tree Node static class Node { int data; Node left, right; }; // Utility function to create a new tree node static Node newNode(int data) { Node temp = new Node(); temp.data = data; temp.left = temp.right = null; return temp; } // Function to print leaf // nodes from right to left static void printLeafNodes(Node root) { // If node is null, return if (root == null) return; // If node is leaf node, print its data if (root.left == null && root.right == null) { System.out.print( root.data +" "); return; } // If right child exists, check for leaf // recursively if (root.right != null) printLeafNodes(root.right); // If left child exists, check for leaf // recursively if (root.left != null) printLeafNodes(root.left); } // Driver code public static void main(String args[]){ Node root = newNode(1); root.left = newNode(2); root.right = newNode(3); root.left.left = newNode(4); root.left.right = newNode(5); root.right.left = newNode(6); root.right.right = newNode(7); root.left.left.left = newNode(8); root.right.right.left = newNode(9); root.left.left.left.right = newNode(10); printLeafNodes(root); } } // This code is contributed by Arnab Kundu |
Python3
# Python3 program to print # leaf nodes from right to left # Binary tree node class newNode: def __init__(self, data): self.data = data self.left = None self.right = None # Function to print leaf# nodes from right to leftdef printLeafNodes(root): # If node is null, return if root == None: return # If node is leaf node, # print its data if (root.left == None and root.right == None): print(root.data, end = " ") return # If right child exists, # check for leaf recursively if root.right: printLeafNodes(root.right) # If left child exists, # check for leaf recursively if root.left: printLeafNodes(root.left) # Driver coderoot = newNode(1)root.left = newNode(2)root.right = newNode(3)root.left.left = newNode(4)root.left.right = newNode(5)root.right.left = newNode(6)root.right.right = newNode(7)root.left.left.left = newNode(8)root.right.right.left = newNode(9)root.left.left.left.right = newNode(10) printLeafNodes(root) # This code is contributed by SHUBHAMSINGH10 |
C#
using System; // C# program to print leaf nodes from right to left class GFG{ // A Binary Tree Node public class Node{ public int data; public Node left, right;} // Utility function to create a new tree node public static Node newNode(int data){ Node temp = new Node(); temp.data = data; temp.left = temp.right = null; return temp;} // Function to print leaf // nodes from right to left public static void printLeafNodes(Node root){ // If node is null, return if (root == null) { return; } // If node is leaf node, print its data if (root.left == null && root.right == null) { Console.Write(root.data + " "); return; } // If right child exists, check for leaf // recursively if (root.right != null) { printLeafNodes(root.right); } // If left child exists, check for leaf // recursively if (root.left != null) { printLeafNodes(root.left); }} // Driver code public static void Main(string[] args){ Node root = newNode(1); root.left = newNode(2); root.right = newNode(3); root.left.left = newNode(4); root.left.right = newNode(5); root.right.left = newNode(6); root.right.right = newNode(7); root.left.left.left = newNode(8); root.right.right.left = newNode(9); root.left.left.left.right = newNode(10); printLeafNodes(root);}} // This code is contributed by shrikanth13 |
Output:
9 6 5 10