C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++の二分木で最大値の根を数える


二分木ルートがあるとします。その値がすべての子孫の値以上であるノードの数をカウントする必要があります。

したがって、入力が次のような場合

C++の二分木で最大値の根を数える

その場合、出力は3を除くすべてのノードとして4になり、基準を満たします。

これを解決するには、次の手順に従います-

  • 関数dfs()を定義します。これはノードを取ります

  • ノードがnullでない場合、-

    • 0を返す

  • l:=dfs(ノードの左側)

  • r:=dfs(ノードの右側)

  • ノードの値>=lとrの最大値の場合、-

    • (retを1増やします)

  • x:=ノードのvalの最大値、lおよびr

  • xを返す

  • メインの方法から、次のようにします。

  • ret:=0

  • dfs(root)

  • retを返す

理解を深めるために、次の実装を見てみましょう-

#include <bits/stdc++.h>
using namespace std;
class TreeNode {
   public:
   int val;
   TreeNode *left, *right;
   TreeNode(int data) {
      val = data;
      left = NULL;
      right = NULL;
   }
};
class Solution {
   public:
   int ret;
   int dfs(TreeNode* node){
      if(!node)
         return 0;
      int l = dfs(node->left);
      int r = dfs(node->right);
      if(node->val >= max(l, r)) {
         ret++;
      }
      int x = max({node->val, l, r});
      return x;
   }
   int solve(TreeNode* root) {
      ret = 0;
      dfs(root);
      return ret;
   }
};
main(){
   Solution ob;
   TreeNode *root = new TreeNode(7);
   root->left = new TreeNode(4);
   root->right = new TreeNode(3);
   root->right->left = new TreeNode(7);
   root->right->right = new TreeNode(5);
   cout << (ob.solve(root));
}

入力

TreeNode *root = new TreeNode(7);
root->left = new TreeNode(4);
root->right = new TreeNode(3);
root->right->left = new TreeNode(7);
root->right->right = new TreeNode(5);

出力

4

  1. C++で二分木の完全性を確認する

    二分木があるとします。ツリーが完全な二分木であるかどうかを確認する必要があります。レベルnの完全な二分木はn-1の完全なレベルを持ち、レベルnのすべてのノードは左から埋められます。したがって、入力ツリーが次のような場合- これは完全な二分木であるため、出力はtrueになります。 これを解決するには、次の手順に従います- ツリーが空の場合は、nullを返します キューqを作成し、それにルートを挿入します フラグを設定:=true qにはいくつかの要素があります sz:=キューのサイズ szは0ではありません node:=キューから削除し

  2. C++での二分木の剪定

    バイナリツリーのヘッドノードルートがあり、さらにすべてのノードの値が0または1であるとします。1を含まないすべてのサブツリーが削除された同じツリーを見つける必要があります。したがって、ツリーが次のような場合- これを解決するには、次の手順に従います- 再帰メソッドsolve()を定義します。これにより、ノードが取得されます。メソッドは次のようになります- ノードがnullの場合、nullを返します ノードの左側:=solve(ノードの左側) ノードの権利:=solve(ノードの権利) ノードの左側がnullで、ノードの右側もnullで、ノード値が0の