我有一個包含整數和char的節點的二叉樹。我正在研究Huffman Coding,我想獲得節點的二進制表示。每個左分支的字符串附加'0',每個右分支附加'1'。二叉樹搜索和跟蹤
我正在尋找一個字符但追蹤它的分支,如果它不在左邊的節點中,請刪除附加到字符串的最後'0'並返回並檢查是否正確。 這看起來很繁重。有沒有另外一種方式讓我跟蹤節點?編輯: 我不得不使用二叉樹。
我有一個包含整數和char的節點的二叉樹。我正在研究Huffman Coding,我想獲得節點的二進制表示。每個左分支的字符串附加'0',每個右分支附加'1'。二叉樹搜索和跟蹤
我正在尋找一個字符但追蹤它的分支,如果它不在左邊的節點中,請刪除附加到字符串的最後'0'並返回並檢查是否正確。 這看起來很繁重。有沒有另外一種方式讓我跟蹤節點?編輯: 我不得不使用二叉樹。
聽起來像一個堆棧數據結構:
你跟蹤你在樹枝上,通過以這種方式使用的堆棧:
std::stack<int>
pop()
push(0)
push(1)
編輯:
您可能需要實際使用std::vector<int>
與改爲push_back
和pop_back
。它仍然像堆棧一樣,但如果使用矢量,則可以在最後得到整個0和1的列表。
那我該如何編碼字符呢? 0爲左邊,1爲右邊。我怎樣才能做到這一點?編輯:哦,我看到了... – 2013-03-27 18:25:57
我編輯解釋更多 – 2013-03-27 18:26:56
你說的是編碼霍夫曼輸出嗎?
您需要爲每個可能的輸入字符建立一個輸出代碼和長度表 - 不要在每個輸入字符上遍歷樹。
我必須使用二叉樹。看到這個鏈接http://en.wikipedia.org/wiki/File:N-ary_to_binary.svg char N將是0000 – 2013-03-27 18:22:09
..對於第一棵樹。假定在A的頂部有另一個節點。 – 2013-03-27 18:22:47
右 - 你最初構建二叉樹,但一旦你有了,你可以爲每個字符建立一個輸出碼和長度表。這些應該都是二進制數據類型,而不是字符串。 – 2013-03-27 18:26:01
我的問題不清楚嗎? – 2013-03-27 18:18:12
真的是字符串?你不想把這些位作爲實際位? – harold 2013-03-27 18:26:23
哪一個會更好/更容易? – 2013-03-27 18:28:19