[BFS] 10. ツリーエンドノードへのショートパス(BFS)

9989 ワード

Q.コンセプト


下図に示すバイナリツリーでは、ルートノード1からエンドノードまでの最短長は
お探しのプログラムを記入してください.
各パスの長さはルートノードからエンドノードまでで、移動回数はメイン(エッジ)の数です.
長さにしましょう

最短の長さは3番オールまでの長さ1です.

ポリシー

  • 最短距離はDFSではなくBFS(BFSであれば1人の子供しか必要ない)
  • であるべきである.

    正解

    import java.util.*;
    class Node{ 
        int data; 
        Node lt, rt; 
        public Node(int val) { 
            data=val; 
            lt=rt=null; 
        } 
    } 
      
    public class Main{ 
        Node root; 
    	public int BFS(Node root){ 
    		Queue<Node> Q=new LinkedList<>();
    		Q.offer(root);
    		int L=0;
    		while(!Q.isEmpty()){
    			int len=Q.size();
    			for(int i=0; i<len; i++){
    				Node cur=Q.poll();
                                    //무조건 여기서 리턴된다.
    				if(cur.lt==null && cur.rt==null) return L;
    				if(cur.lt!=null) Q.offer(cur.lt);
    				if(cur.rt!=null) Q.offer(cur.rt);
    			}
    			L++;
    		}
                    // 문법 오류로 임의의 숫자 리턴
    		return 0;
        } 
      
        public static void main(String args[]) { 
            Main tree=new Main(); 
            tree.root=new Node(1); 
            tree.root.lt=new Node(2); 
            tree.root.rt=new Node(3); 
            tree.root.lt.lt=new Node(4); 
            tree.root.lt.rt=new Node(5); 
            System.out.println(tree.BFS(tree.root)); 
        } 
    }