簡體   English   中英

如何在輸入中以堆形式給出的二叉樹中找到節點的坐標?

[英]How do I find the coordinates of the nodes in a binary tree given as a heap in the input?

給定一個堆作為輸入,例如:

1 2 3 - 5 - 7

其中“-”代表一個空節點,我想找到節點的坐標,對於上面的輸入,它是:

[1, 0] [0, 2] [2, 2] [-1, -1] [1, 4] [-1, -1] [3, 4]

坐標變換的規則如下:

  • 樹的每個“層”之間應該有 1 行空間,這意味着我們將每層的 Y 值增加 2。
  • 最左邊的節點應該有它的 X 坐標 = 0。
  • 每個節點之間應該至少有一個空格。
  • 所有坐標都應該是整數。
  • 如果一個根節點有兩個孩子,根節點應該放在它的兩個孩子的中間。
  • 如果根節點只有一個子節點,則該子節點應放置在根節點的左側或右側,具體取決於它是根節點的左子節點還是右子節點。
  • 如果一個根節點有兩個子樹,那么到右子樹節點的所有 x 坐標都大於到左子樹節點的 x 坐標
  • 空節點應具有坐標 [-1,-1]

我一生都無法弄清楚如何解決這個問題,因此將不勝感激。

如果查看堆,您會注意到每一層的節點數是前一層的兩倍。 所以你有1、2、4、8、16等級數。

給定節點在輸入數組中的索引,您可以通過對索引取以 2 為底的對數並向下取整,輕松確定它所在的級別。 也就是說,如果我們使用基於 1 的索引,那么:

log2(1) = 0
log2(2) = 1
log2(3) = 1
log2(4) = 2
log2(5) = 2
log2(6) = 2
log2(7) = 2

將這些值乘以 2 以獲得Y坐標。

對於X坐標,如果取一個索引並減去出現在其上方所有級別上的節點數,則該項目的索引位於其 row 上 考慮列表中的第四個(基於 1 的)項目。 您知道它在第 2 級。在它之前的節點數是(2^2)-14-3 = 1 因此,列表中的第 4 項在其級別的索引 1 處。

從您的問題中不清楚您想如何轉換行索引。 如果所有項目都有值,那么在您的最后一行,X 坐標將為 0、1、2、3。 如果這就是您想要對每一行進行處理的方式,那么您只需從上一段中描述的計算中減去 1。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM