2013-03-27 46 views
1

我有一個包含整數和char的節點的二叉樹。我正在研究Huffman Coding,我想獲得節點的二進制表示。每個左分支的字符串附加'0',每個右分支附加'1'。二叉樹搜索和跟蹤

我正在尋找一個字符但追蹤它的分支,如果它不在左邊的節點中,請刪除附加到字符串的最後'0'並返回並檢查是否正確。 這看起來很繁重。有沒有另外一種方式讓我跟蹤節點?編輯: 我不得不使用二叉樹。

+0

我的問題不清楚嗎? – 2013-03-27 18:18:12

+0

真的是字符串?你不想把這些位作爲實際位? – harold 2013-03-27 18:26:23

+0

哪一個會更好/更容易? – 2013-03-27 18:28:19

回答

2

聽起來像一個堆棧數據結構:

你跟蹤你在樹枝上,通過以這種方式使用的堆棧:

  • path = std::stack<int>
  • 拉昇父== pop()
  • 移動到左子== push(0)
  • 右移孩子== push(1)

編輯:

您可能需要實際使用std::vector<int>與改爲push_backpop_back。它仍然像堆棧一樣,但如果使用矢量,則可以在最後得到整個0和1的列表。

+0

那我該如何編碼字符呢? 0爲左邊,1爲右邊。我怎樣才能做到這一點?編輯:哦,我看到了... – 2013-03-27 18:25:57

+0

我編輯解釋更多 – 2013-03-27 18:26:56

2

你說的是編碼霍夫曼輸出嗎?

您需要爲每個可能的輸入字符建立一個輸出代碼和長度表 - 不要在每個輸入字符上遍歷樹。

+0

我必須使用二叉樹。看到這個鏈接http://en.wikipedia.org/wiki/File:N-ary_to_binary.svg char N將是0000 – 2013-03-27 18:22:09

+0

..對於第一棵樹。假定在A的頂部有另一個節點。 – 2013-03-27 18:22:47

+0

右 - 你最初構建二叉樹,但一旦你有了,你可以爲每個字符建立一個輸出碼和長度表。這些應該都是二進制數據類型,而不是字符串。 – 2013-03-27 18:26:01