Javaの二分木の奇数位置ノードと偶数位置ノードの合計の違い
問題の説明
与えられた二分木で、奇数位置と偶数位置のノードの合計の違いを見つけるプログラムを作成します。レベル0のルート、奇数の位置、レベル2のルートの左/右の子、奇数の位置の左の子、偶数の位置の右の子などを想定します。
例
5 / \ 2 6 / \ \ 1 4 8 / / \ 3 7 9 Sum of nodes at odd positions = 5 + 2 + (1 + 8) + (3 + 9) = 5 + 2 + 9 + 12 = 28 Sum of nodes at even level = 0 + 6 + 4 + 7 = 17 Difference = 11.
解決策
レベルオーダートラバーサルを使用します。トラバーサル中に、最初の要素を奇数位置としてマークし、新しい要素が検出されたときに偶数に切り替えてから、次の要素に切り替えます。
例
以下は、必要な出力を見つけるためのJavaのプログラムです。
import java.util.LinkedList; class Node { int data; Node left, right; Node(int data){ this.data = data; this.left = this.right = null; } } public class JavaTester { public static Node getTree(){ Node root = new Node(5); root.left = new Node(2); root.right = new Node(6); root.left.left = new Node(1); root.left.right = new Node(4); root.left.right.left = new Node(3); root.right.right = new Node(8); root.right.right.right = new Node(9); root.right.right.left = new Node(7); return root; } public static int difference(LinkedList<Node> queue){ if(queue.isEmpty()) return 0; int evenSum = 0; int oddSum = 0; while(true){ int nodes = queue.size(); if(nodes == 0) break; boolean isOdd = true; while(nodes > 0){ Node node = queue.peek(); if(isOdd) oddSum += node.data; else evenSum += node.data; queue.remove(); nodes--; if(node.left != null) queue.add(node.left); if(node.right != null) queue.add(node.right); isOdd = !isOdd; } } return oddSum - evenSum; } public static void main(String args[]){ Node tree = getTree(); LinkedList<Node> queue = new LinkedList<Node>(); queue.add(tree); System.out.println(difference(queue)); } }
出力
11
-
JavaでのArrayListとHashSetの違い
HashSetとArrayListはどちらも、Javaコレクションフレームワークの最も重要なクラスの一部です。 以下は、ArrayListとHashSetの重要な違いです。 Sr。いいえ。 キー ArrayList ハッシュセット 1 実装 ArrayListはリストインターフェイスの実装です。 一方、 HashSetは、セットインターフェイスの実装です。 2 内部実装 ArrayListは、その実装のために配列を内部的に実装します。 HashSetは、実装にHashmapを内部的に使用します。 3 要素の順序 ArrayListは、挿入順序、つまり
-
奇数桁と偶数桁の合計の差のためのPythonプログラム
この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 −整数の場合、奇数桁の合計と偶数桁の合計の差が0であるかどうかを計算する必要があります。 ブルートフォースアプローチでは、数値のすべての偶数桁と奇数桁の合計を計算し、それらを減算して答えを計算します。 計算時間を短縮するために、精神数学の概念を使用します。 上記の制約は、数値が11で割り切れる場合にのみ当てはまります。したがって、以下の実装では、数値の11で割り切れる可能性を確認します。 ここで、複雑さはO(n)から、分割可能性と比較に関係する一定の時間に減少します。 それでは