📜  使用递归表示为字符串的树中第 k 层节点的乘积

📅  最后修改于: 2021-09-03 14:50:09             🧑  作者: Mango

先决条件:表示为字符串的树中第 k 层节点的乘积

给定一个整数“ K ”和一个字符串格式的二叉树。树的每个节点的值都在 0 到 9 之间。我们需要找到从根开始的第 K 层元素的乘积。根在 0 级。

注:树的给出形式为:(节点值(左子树)(右子树))

例子:

方法:想法是将字符串视为一棵树而不实际创建一个树,并简单地以后序方式递归遍历字符串并仅考虑位于第 k 层的节点。

下面是上述方法的实现:

C++
// C++ implementation to find product
// of elements at k-th level
  
#include 
using namespace std;
  
// Recursive Function to find product
// of elements at k-th level
int productAtKthLevel(string tree,
            int k, int& i, int level){
  
    if (tree[i++] == '(') {
  
        // if subtree is null,
        // just like if root == NULL
        if (tree[i] == ')')
            return 1;
  
        int product = 1;
  
        // Consider only level k node
        // to be part of the product
        if (level == k)
            product = tree[i] - '0';
  
        // Recur for Left Subtree
        int leftproduct = productAtKthLevel(
                    tree, k, ++i, level + 1);
  
        // Recur for Right Subtree
        int rightproduct = productAtKthLevel(
                tree, k, ++i, level + 1);
  
        // Taking care of ')' after
        // left and right subtree
        ++i;
        return product * leftproduct *
                       rightproduct;
    }
}
  
// Driver Code
int main()
{
    string tree = "(0(5(6()())(4()"
    "(9()())))(7(1()())(3()())))";
    int k = 2;
    int i = 0;
  
    cout << productAtKthLevel(tree, k, i, 0);
  
    return 0;
}


Java
// Java implementation to find
// product of elements at k-th level
  
class GFG {
    static int i;
  
    // Recursive Function to find product
    // of elements at k-th level
    static int productAtKthLevel(
        String tree, int k, int level){
  
        if (tree.charAt(i++) == '(') {
  
            // if subtree is null,
            // just like if root == null
            if (tree.charAt(i) == ')')
                return 1;
  
            int product = 1;
  
            // Consider only level k node
            // to be part of the product
            if (level == k)
                product = tree.charAt(i) - '0';
  
            // Recur for Left Subtree
            ++i;
            int leftproduct = productAtKthLevel(
                            tree, k, level + 1);
  
            // Recur for Right Subtree
            ++i;
            int rightproduct = productAtKthLevel(
                            tree, k, level + 1);
  
            // Taking care of ')' after
            // left and right subtree
            ++i;
            return product * leftproduct 
              * rightproduct;
        }
        return Integer.MIN_VALUE;
    }
  
    // Driver Code
    public static void main(String[] args)
    {
        String tree = "(0(5(6()())(4()" 
        + "(9()())))(7(1()())(3()())))";
        int k = 2;
        i = 0;
        System.out.print(
            productAtKthLevel(tree, k, 0)
        );
    }
}


Python
# Python implementation to find product of 
# digits of elements at k-th level 
  
# Recursive Function to find product 
# of elements at k-th level 
def productAtKthLevel(tree, k, i, level):
      
    if(tree[i[0]]=='('):
        i[0]+= 1
        # if subtree is null, 
        # just like if root == NULL 
        if(tree[i[0]] == ')'):
            return 1            
          
        product = 1
        # Consider only level k node
        # to be part of the product 
        if(level == k):
            product = int(tree[i[0]])
              
        # Recur for Left Subtree 
        i[0]+= 1
        leftproduct = productAtKthLevel(tree,
                            k, i, level + 1) 
              
        # Recur for Right Subtree 
        i[0]+= 1
        rightproduct = productAtKthLevel(tree, 
                            k, i, level + 1) 
              
        # Taking care of ')' after left and right subtree 
        i[0]+= 1
        return product * leftproduct * rightproduct         
      
# Driver Code
if __name__ == "__main__":
    tree = "(0(5(6()())(4()(9()())))(7(1()())(3()())))"
    k = 2
    i =[0] 
    print(productAtKthLevel(tree, k, i, 0))


C#
// C# implementation to find product
// of elements at k-th level
  
using System;
  
class GFG {
    static int i;
  
    // Recursive Function to find product
    // of elements at k-th level
    static int productAtKthLevel(
        String tree, int k, int level){
  
        if (tree[i++] == '(') {
  
            // if subtree is null,
            // just like if root == null
            if (tree[i] == ')')
                return 1;
  
            int product = 1;
  
            // Consider only level k node
            // to be part of the product
            if (level == k)
                product = tree[i] - '0';
  
            // Recur for Left Subtree
            ++i;
            int leftproduct = productAtKthLevel(
                            tree, k, level + 1);
  
            // Recur for Right Subtree
            ++i;
            int rightproduct = 
            productAtKthLevel(tree, k, level + 1);
  
            // Taking care of ')' after
            // left and right subtree
            ++i;
            return product * 
              leftproduct * rightproduct;
        }
        return int.MinValue;
    }
  
    // Driver Code
    public static void Main(String[] args)
    {
        String tree = "(0(5(6()())(4()"
        +"(9()())))(7(1()())(3()())))";
        int k = 2;
        i = 0;
        Console.Write(productAtKthLevel(tree, k, 0));
    }
}


输出:
72

时间复杂度: O(N)

如果您想与行业专家一起参加直播课程,请参阅Geeks Classes Live