劍指Offer——題目22

/* 日期:2019.7.23
 * 作者:***
 * 功能:劍指offer 題目22
 * 
 * =====================================================
 * 問題描述:
 * 從上往下打印出二叉樹的每個節點,同層節點從左至右打印。
 * 
 * =====================================================
 * 思路詳解:
 * 本題目很簡單,學過數據結構關於二叉樹部分的都知道
 * 本題目爲
 * 樹的廣度優先遍歷,常用思想即爲隊列(先進先出)
 * 
 * */

package com.***********;

import java.util.*;

public class Main2 {
	
	//主函數,作爲程序代碼測試的入口
	public static void main(String args[])
	{
		//模擬題目要求測試用例
		TreeNode root = new TreeNode(0);
		TreeNode node1 = new TreeNode(1);
		TreeNode node2 = new TreeNode(2);
		TreeNode node3 = new TreeNode(3);
		TreeNode node4 = new TreeNode(4);
		TreeNode node5 = new TreeNode(5);
		TreeNode node6 = new TreeNode(6);
		TreeNode node7 = new TreeNode(7);
		
		root.left = node1;
		root.right = node2;
		node1.left = node3;
		node1.right = node4;
		node2.left = node5;
		node2.right = node6;
		node5.right = node7;
		
		//客戶端代碼
		Main2 main2 = new Main2();
		ArrayList<Integer> result = main2.PrintFromTopToBottom(root);
		
		//遍歷顯示結果,查看是否正確
		System.out.println("程序測試結果顯示如下:");
		for(int num : result)
			System.out.print(num+" ");
	}

	//封裝函數,解決問題
	public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
		
		ArrayList<Integer> list = new ArrayList<Integer>();
		
		if(root == null) return list;	//特殊情況處理
		
		Queue<TreeNode> queue = new LinkedList<TreeNode>();		//使用隊列滿足邏輯要求
		
		queue.offer(root);		//進入隊列
		
		TreeNode tempNode = null;
		while(!queue.isEmpty())		//只要隊列裏還有元素,持續遍歷
		{
			tempNode = queue.poll();	//取出當前隊列的開頭元素
			list.add(tempNode.val);		//得到其節點內容
			
			//樹的廣度優先遍歷,左右節點不爲空,添加進入隊列
			if(tempNode.left != null) queue.offer(tempNode.left);
			if(tempNode.right != null) queue.offer(tempNode.right);
		}
		return list;
    }
}

//==========================
//二叉樹代碼定義如下:
	class TreeNode {
	    int val = 0;
	    TreeNode left = null;
	    TreeNode right = null;

	    public TreeNode(int val) {
	        this.val = val;
	    }
	}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章