如果只是單純的二叉樹,只有得到根節點才能完成遍歷的序列
如何找到乙個結點的指標?
已知結點p
思路從根節點出發,設定乙個q結點和pre結點代表q結點的前驅
pre指標的結點為q結點的前驅,如果q==p,那麼pre就是p結點的前驅
如果需要找到q結點的後繼,那麼當pre==p的時候,q就是p的後繼了
二叉樹線索化
因為鏈式儲存的二叉樹,結點為n就會有n+1個空鏈域,如果全部利用起來,進行線索化,就可以很方便的找到前驅和後繼
前驅線索:由左孩子充當
後繼線索:由右孩子充當
用ltag,rtag:如果置為1,說明是線索,為0標識為0
在先序線索化中會出現轉圈問題,所以,要在訪問左子樹的時候判斷一下,左子樹指向的是孩子結點還是左子樹
構造的核心思想
先序、中序、後續的遍歷序列
用乙個pre指標來記錄當前訪問指標的前驅,如果需要標記前驅,那麼將其lchild設定為pre,如果需要找到後繼結點。將pre->rchild設定為p
易錯點:
先序遍歷中,左子樹可能出現轉圈的問題,所以需要判斷是否已經線索化
最後乙個結點的rchild的tag需要單獨處理
具體**
#includestruct elemtype;
typedef struct bitnodebitnode,*bitree;
bitnode * pre = null;
void visit(bitnode *t)
if(pre!=null && pre->rchlid==null)
pre = t;
}int preorder(bitree t)
}void createinthead(bitree t)
if(pre->rchlid==null)
}
(C )二叉樹的線索化 線索二叉樹
線索化標誌tag enum pointertag 結點結構 template struct binarytreenodethd 基類迭代器 template struct binarytreeiterator t operator t operator bool operator const sel...
線索二叉樹
當用二叉鍊錶作為二叉樹的儲存結構時,因為每個結點中只有指向其左 右兒子結點的指標,所以從任一結點出發只能直接找到該結點的左 右兒子。在一般情況下靠它無法直接找到該結點在某種遍歷序下的前驅和後繼結點。如果在每個結點中增加指向其前驅和後繼結點的指標,將降低儲存空間的效率。我們可以證明 在n個結點的二叉鍊...
線索二叉樹
1.線索二叉樹結構和操作定義 threadbintree.h 功能 線索標誌域所有值 typedef enumnodeflag 功能 線索二叉樹結構體 typedef struct threadtreethreadbintree 前驅節點指標 threadbintree previous null ...