免責事項:この記事はブロガーオリジナル記事です、続くBY-SAのCC 4.0を著作権契約、複製、元のソースのリンクと、この文を添付してください。
今日のニュースの見出しインタビューする今日は、それ自体が算数が得意ではありませんバイナリツリーについての質問をした、長い考え抜かソリューションのような結果は、彼が実現しなかったインタビュアーを思い出させた後、戻ってすぐに達成するために書き出されてきました下記を参照してください。
インタビューの質問
この問題は、バイナリツリー、その後、印刷機の深さと、それは1,2,3,4,5,6,7する必要がありますされます
これは、あなたが再帰を期待することができるものも問題ありません、パパPaが実際の結果のプリントアウトを達成するために配る達成です:1,2,4,5,3,6,7、それは達成するために失敗しました。その後、インタビュアーが各要素を再帰的に保存されているに言った、彼は以下に示すように、バック、書き出さ達成する一瞬思いました。
コードの実装
ノードノードクラス
非常に単純な、何も言うこと。
class Node {
int value;
Node left;
Node right;
public Node(int value, Node left, Node right) {
this.value = value;
this.left = left;
this.right = right;
}
}
主な論理的なアプローチ
private static void printNode(List<Node> nodes) {
List<Node> listT = new ArrayList<>();
for (Node node : nodes) {
System.out.print(node.value + ",");
if (node.left != null) {
listT.add(node.left);
}
if (node.right != null) {
listT.add(node.right);
}
}
// 判断当前层是否有节点加入listT中,如果有,则进行递归调用
if(!listT.isEmpty()) {
printNode(listT);
}
}
mainメソッドを達成するために
public static void main(String[] args) {
// leaf node
Node node4 = new Node(4, null, null);
Node node5 = new Node(5, null, null);
Node node6 = new Node(6, null, null);
Node node7 = new Node(7, null, null);
// node 2 and node 3
Node node2 = new Node(2, node4, node5);
Node node3 = new Node(3, node6, node7);
// root node
Node root = new Node(1, node2, node3);
List<Node> list = new ArrayList<>();
list.add(root);
printNode(list);
}
次のように実行結果があります
概要
顔の質問バイナリツリーの場合、通常の状況下では、再帰と不可分であり、その後、各再帰的な役割が何であるかを考える、私はこの質問が原因層でデータを印刷する必要性から、各ノードの役割ですね。あなたは再帰的な役割に移動した場合は、論理的にはるかに良い達成だと思います。
私たちは、機会ああの二つの顔を与えることを願っています。