以下は私のコードです:
class Node{
int value;
Node left;
Node right;
Node parent;
//getters, setters
}
ツリーを作成する
private static void createTree() throws FileNotFoundException{
Map<String,Node> nodeMap = new HashMap<String,Node>();
Scanner sc = new Scanner(new File("<location>"));
int row =0;
while(sc.hasNextLine()){
String line = sc.nextLine();
Scanner scanLine = new Scanner(line);
System.out.println(line);
int col =0;
while(scanLine.hasNextInt()){
int value = scanLine.nextInt();
System.out.println(row+","+col+"="+value);
Node node = new Node(value);
nodeMap.put(row+","+col,node);
if(row >0){
if(col %2 ==0){
//left node
Node parent = nodeMap.get(row-1+","+col/2);
if(parent !=null){
node.setParent(parent);
parent.setLeft(node);
}
}else{
//right node
Node parent = nodeMap.get(row-1+","+(col-1)/2);
if(parent !=null){
node.setParent(parent);
parent.setRight(node);
}
}
}
col++;
}
row++;
}
System.out.println(nodeMap);
Node root = nodeMap.get("0,0");
traverseTree(root);
System.out.println("sum="+sum);
}
実際のトラバーサル
static int sum =0;
private static void traverseTree(Node n){
if(n != null){
sum+=n.value;
traverseTree(n.left);
traverseTree(n.right);
}
}
2 つの質問があります。
入力を読み取り、ツリーを作成します。ファイルから読み取り、ルート ノードをハッシュマップに格納します。代替手段は何ですか?
再帰検索では、合計を関数の外に置いているので、合計を順次計算することができます。合計変数を内部に保持し、最後に合計値を返すことは可能ですか?