【36】按層列印二叉樹

來源:互聯網
上載者:User

標籤:

演算法題目大都比較抽象,可以通過舉例子來搞清楚具體的邏輯。題目:

從上到下,按照從左往右列印二叉樹每一層的結點。

二叉樹的結點:
class BinaryTreeNode{        int mValue;        BinaryTreeNode mLeft;;        BinaryTreeNode mRight;    }
思路:
  • 我們發現規律:先遍曆的結點,它的子節點也會先被遍曆到,是一個先進先出的模型,考慮用隊列來實現。
  • 沒遍曆一個結點時候,就把它的孩子結點取出來,放到隊列的尾部,然後重複這個過程,直到隊列為空白。
代碼:首先介紹一下java的隊列

隊列是一種特殊的線性表,它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。隊列中沒有元素時,稱為空白隊列。
在隊列這種資料結構中,最先插入的元素將是最先被刪除的元素;反之最後插入的元素將是最後被刪除的元素,因此隊列又稱為“先進先出”(FIFO—first in first out)的線性表。
Queue使用時要盡量避免Collection的add()和remove()方法,而是要使用offer()來加入元素,使用poll()來擷取並移出元素。它們的優點是通過傳回值可以判斷成功與否,add()和remove()方法在失敗的時候會拋出異常。 如果要使用前端而不移出該元素,使用
element()或者peek()方法。
LinkedList類實現了Queue介面,因此我們可以把LinkedList當成Queue來用。

amazing!!!

void printFromTopToBottom(BinaryTreeNode root){        if(root ==null) return;        LinkedList<BinaryTreeNode> queue = new LinkedList<BinaryTreeNode>();        queue.offer(root);        while(queue.size() > 0){            BinaryTreeNode tmp = queue.peek();            queue.poll();            System.out.println(tmp.mValue+"");            if(tmp.mLeft != null){                queue.offer(tmp.mLeft);            }            if(tmp.mRight != null){                queue.offer(tmp.mRight);            }        }    }
本題目擴充:

如何?圖的廣度優先遍曆呢?
也可以用隊列來實現。
樹是圖的一種退化形式,從上到下,按層遍曆二叉樹實際是一種廣度優先遍曆二叉樹。

結論:

不管是廣度優先遍曆一棵樹或圖,都要使用隊列。

  • 第一步是把起始結點放入隊列。
  • 從隊列頭部取出一個結點。取出每一個和這個結點相鄰的結點放入。
  • 重複直到隊列是空的。
歡迎入群:公眾號IT面試題匯總討論群


如果掃描不進去,加我(rdst6029930)拉你。

歡迎關注《IT面試題匯總》訂閱號。每天推送經典面試題和面試心得技巧,都是乾貨!訂閱號二維碼如下:


http://my.csdn.net/u010321471

【36】按層列印二叉樹

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.