📌  相关文章
📜  打印给定级别的叶节点

📅  最后修改于: 2022-05-13 01:57:17.120000             🧑  作者: Mango

打印给定级别的叶节点

给定一棵二叉树,打印给定层 L 的二叉树的所有叶节点。
例子:

Input:    
           1
          /  \
         2    3
        /    /  \
       4    5    6
 level = 3

Output: 4 5 6

Input:    
             7
            /  \
           2    3
          / \    \
         4   9   10
                 /
                6
   level = 3

Output: 4 9

方法:以层序方式递归遍历树。如果当前级别与给定级别相同,则检查当前节点是否为叶节点。如果它是叶节点,则打印它。
下面是上述方法的实现:

C++
// C++ program to print all the
// leaf nodes at a given level
// in a Binary tree
#include 
using namespace std;
 
// Binary tree node
struct node {
    struct node* left;
    struct node* right;
    int data;
};
 
// Function to create a new
// Binary node
struct node* newNode(int data)
{
    struct node* temp = new node;
 
    temp->data = data;
    temp->left = NULL;
    temp->right = NULL;
 
    return temp;
}
 
// Function to print Leaf Nodes at
// a given level
void PrintLeafNodes(struct node* root, int level)
{
    if (root == NULL)
        return;
 
    if (level == 1) {
        if (root->left == NULL && root->right == NULL)
            cout << root->data << " ";
    }
    else if (level > 1) {
        PrintLeafNodes(root->left, level - 1);
        PrintLeafNodes(root->right, level - 1);
    }
}
 
// Driver code
int main()
{
    struct node* root = newNode(1);
    root->left = newNode(2);
    root->right = newNode(3);
    root->left->left = newNode(6);
    root->right->right = newNode(4);
    root->left->left->left = newNode(8);
    root->left->left->right = newNode(7);
 
    int level = 4;
 
    PrintLeafNodes(root, level);
 
    return 0;
}


Java
// Java program to print all the
// leaf nodes at a given level
// in a Binary tree
class GFG
{
 
    // Binary tree node
    static class node
    {
 
        node left;
        node right;
        int data;
    };
 
    // Function to create a new
    // Binary node
    static node newNode(int data)
    {
        node temp = new node();
 
        temp.data = data;
        temp.left = null;
        temp.right = null;
 
        return temp;
    }
 
    // Function to print Leaf Nodes at
    // a given level
    static void PrintLeafNodes(node root, int level)
    {
        if (root == null)
        {
            return;
        }
 
        if (level == 1)
        {
            if (root.left == null && root.right == null)
            {
                System.out.print(root.data + " ");
            }
 
        }
        else if (level > 1)
        {
            PrintLeafNodes(root.left, level - 1);
            PrintLeafNodes(root.right, level - 1);
        }
    }
 
    // Driver code
    public static void main(String[] args)
    {
        node root = newNode(1);
        root.left = newNode(2);
        root.right = newNode(3);
        root.left.left = newNode(6);
        root.right.right = newNode(4);
        root.left.left.left = newNode(8);
        root.left.left.right = newNode(7);
 
        int level = 4;
 
        PrintLeafNodes(root, level);
    }
}
 
// This code contributed by Rajput-Ji


Python3
# Python3 program to print all the
# leaf nodes at a given level
# in a Binary tree
 
# Binary tree node
class node:
     
    def __init__(self, data):
        self.left=None
        self.right=None
        self.data=data
  
# Function to create a new
# Binary node
def newNode(data):
    return node(data)
  
# Function to print Leaf Nodes at
# a given level
def PrintLeafNodes(root, level):
    if (root == None):
        return
  
    if (level == 1):
        if (root.left == None and
            root.right == None):
            print(root.data, end = " ")
     
    elif (level > 1):
        PrintLeafNodes(root.left, level - 1)
        PrintLeafNodes(root.right, level - 1)
         
if __name__=="__main__":
     
    root=newNode(1)
    root.left = newNode(2);
    root.right = newNode(3);
    root.left.left = newNode(6);
    root.right.right = newNode(4);
    root.left.left.left = newNode(8);
    root.left.left.right = newNode(7);
    level = 4;
    PrintLeafNodes(root, level);
 
# This code is contributed by rutvik_56


C#
// C# program to print all the
// leaf nodes at a given level
// in a Binary tree
using System;
 
class GFG
{
 
    // Binary tree node
    public class node
    {
 
        public node left;
        public node right;
        public int data;
    };
 
    // Function to create a new
    // Binary node
    static node newNode(int data)
    {
        node temp = new node();
 
        temp.data = data;
        temp.left = null;
        temp.right = null;
 
        return temp;
    }
 
    // Function to print Leaf Nodes at
    // a given level
    static void PrintLeafNodes(node root, int level)
    {
        if (root == null)
        {
            return;
        }
 
        if (level == 1)
        {
            if (root.left == null && root.right == null)
            {
                Console.Write(root.data + " ");
            }
 
        }
        else if (level > 1)
        {
            PrintLeafNodes(root.left, level - 1);
            PrintLeafNodes(root.right, level - 1);
        }
    }
 
    // Driver code
    public static void Main(String[] args)
    {
        node root = newNode(1);
        root.left = newNode(2);
        root.right = newNode(3);
        root.left.left = newNode(6);
        root.right.right = newNode(4);
        root.left.left.left = newNode(8);
        root.left.left.right = newNode(7);
 
        int level = 4;
 
        PrintLeafNodes(root, level);
    }
}
 
// This code has been contributed by 29AjayKumar


Javascript


输出:
8 7

时间复杂度:O(N) 其中 N 是二叉树中的节点数。
辅助空间: O(N)