以字串形式表示的樹中第 k 層節點的乘積 (C++)


給定一個以字串格式表示節點資料的樹,任務是找到二叉樹中第 k 層節點的乘積。樹的每個節點包含三個部分:資料部分、指向左子樹的左指標和指向右子樹的右指標。

二叉樹的層級從 0 開始,可以到任何正數 'n'。因此,給定層級 'k',程式必須計算給定 'k' 層節點的乘積。

例如,在二叉樹中,如果給定 k=2

則第 2 層的節點為 - 40, 50, 60

乘積 = 40 * 50 * 60 = 120000

輸入

(1(2(3()())(4()(5()())))(6(7()())(8()())))
K = 1

輸出

product of nodes at level k = 12

輸入

(0(5(6()())(4()(9()())))(7(1()())(3()())))"
k = 2

輸出

product of nodes at level k = 72

演算法

Start
Step 1→ Declare function to calculate nodes at k-th level
   int product(string tree, int k)
      Declare int level = -1
      Declare int product = 1
      Declare int size = tree.length()
      Loop For int i = 0 and i < size and i++
         IF tree[i] = '('
            Set level++
         End
         Else IF tree[i] = ')'
            Set level—
         End
         Else
            IF level = k
               Set product *= (tree[i] - '0')
            End
         End
      End
      return product
Step 2→ In main()
   Declare string tree = "(1(2(3()())(4()(5()())))(6(7()())(8()())))"
   Declare int k = 1
   Call product(tree, k)
Stop

示例

線上演示

#include <bits/stdc++.h>
using namespace std;
//finding product at kth level
int product(string tree, int k){
   int level = -1;
   int product = 1;
   int size = tree.length();
   for (int i = 0; i < size; i++){
      if (tree[i] == '(')
         level++;
      else if (tree[i] == ')')
         level--;
      else{
         if (level == k)
            product *= (tree[i] - '0');
      }
   }
   return product;
}
int main(){
   string tree = "(1(2(3()())(4()(5()())))(6(7()())(8()())))";
   int k = 1;
   cout <<"product of nodes at level k = "<<product(tree, k);
   return 0;
}

輸出

執行以上程式碼將生成以下輸出:

product of nodes at level k = 12

更新於:2020年8月13日

88 次瀏覽

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.