找完全二叉樹最底層最右邊的結點

2021-06-21 15:23:06 字數 642 閱讀 5367

之前看到的一道題目。想了一下,借助佇列用層次遍歷。過程

1、把根結點入佇列

2、如果佇列非空,重複3-4,否則執行5。

3、取出佇列頭結點,如果它有左子樹、右子樹,則子樹入佇列。

4、遍歷此結點。

5、結束遍歷。

這樣做的話,演算法複雜度為o(n)。看阿里的一篇面經,說有log(n)演算法,在網上搜了一下,總結如下:

一顆二叉樹的總結點其實是知道的,設為n。

如上圖,總共有15個結點,那麼找15號結點只需從根結點開始,向右--向右--向右。

假設只有14個點,那麼向右--向右--向左

假設只有13個結點,那麼向右---向左---向右

可以找到規律,總結點數即為最後乙個結點,也就是我們要找的結點。把此結點一直除以2,記錄其餘數。之後根據餘數來找。

例如15號結點,一直除以2,餘數分別為(15%2)1、(7%2)1、(3%2)1

例如14號結點,一直除以2,餘數分別為(14%2)0、(7%2)1、(3%2)1

把這些餘數逆序,從根結點開始找,如果是1,則向右,如果是0則向左。

這樣演算法時間複雜度為log(n)。

找完全二叉樹最底層最右邊的結點

題目 用log n 演算法 找完全二叉樹最底層最右邊的結點 一顆二叉樹的總結點其實是知道的,設為n。如上圖,總共有15個結點,那麼找15號結點只需從根結點開始,向右 向右 向右。假設只有14個點,那麼向右 向右 向左 假設只有13個結點,那麼向右 向左 向右 可以找到規律,總結點數即為最後乙個結點,...

完全二叉樹結點數

222.完全二叉樹的節點個數 給你一棵完全二叉樹的根節點 root 求出該樹的節點個數。完全二叉樹的定義如下 在完全二叉樹中,除了最底層節點可能沒填滿外,其餘每層節點數都達到最大值,並且最下面一層的節點都集中在該層最左邊的若干位置。若最底層為第 h 層,則該層包含 1 2h 個節點。示例 輸入 ro...

二叉樹,完全二叉樹,滿二叉樹

二叉樹 是n n 0 個結點的有限集合,它或者是空樹 n 0 或者是由乙個根結點及兩顆互不相交的 分別稱為左子樹和右子樹的二叉樹所組成。滿二叉樹 一顆深度為k且有2 k 1個結點的二叉樹稱為滿二叉樹。說明 除葉子結點外的所有結點均有兩個子結點。所有葉子結點必須在同一層上。完全二叉樹 若設二叉樹的深度...