學習資料結構和演算法的日常demo二叉樹遍歷存在的問題
線索二叉樹基本介紹
中序線索二叉樹思路分析
**實現
public
class
treenode
@override
public string tostring()
';}public
intgetvalue()
public
intgetlefttype()
public
void
setlefttype
(int lefttype)
public
intgetrighttype()
public
void
setrighttype
(int righttype)
public
void
setvalue
(int value)
public treenode getleft()
public
void
setleft
(treenode left)
public treenode getright()
public
void
setright
(treenode right)
// 前序遍歷
public
void
preorder()
// 遞迴右子樹if(
this
.right != null)
}// 中序遍歷
public
void
infixorder()
// 輸出父節點
system.out.
print
(this
.value +
" ")
;// 遞迴右子樹if(
this
.right != null)
}// 後序遍歷
public
void
postorder()
// 遞迴右子樹if(
this
.right != null)
// 輸出父節點
system.out.
print
(this
.value +
" ");}
}public
class
threadedbinarytree
public
void
setroot
(treenode root)
// 對二叉樹中序線索化
// node即為當前需要線索化的節點
public
void
threadednodes
(treenode node)
// 1.線索化左子樹
threadednodes
(node.
getleft()
);// 2.線索化當前節點
// 處理當前節點的前驅節點
if(node.
getleft()
== null)
// 處理後繼節點
if(pre != null && pre.
getright()
== null)
// 每處理乙個節點,讓當前節點是下乙個節點的前驅節點
pre = node;
// 3.線索化右子樹
threadednodes
(node.
getright()
);}// 遍歷中序線索化二叉樹
public
void
threadedlist()
// 列印當前節點
system.out.
print
(node.
getvalue()
+" ");
// 如果當前節點的右節點指向後繼節點,就一直輸出
while
(node.
getrighttype()
==1)// 替換這個遍歷的節點
node = node.
getright()
;}}// 前序遍歷
public
void
preorder()
else
}public
void
infixorder()
else
}public
void
postorder()
else}}
// 測試類
線索化二叉樹關鍵點
// **片段
// 如果lefttype為0,表示指向左子樹,如果為1表示指向前驅節點
private
int lefttype;
// 如果righttype為0,表示指向右子樹,如果為1表示指向前後繼節點
private
int righttype;
// 每處理乙個節點,讓當前節點是下乙個節點的前驅節點
pre = node;
遞迴過程中,不斷處理前驅節點和後繼節點的指向github:資料結構和演算法源** 資料結構之線索二叉樹
應用案例說明 將下面的二叉樹,進行中序線索二叉樹。中序遍歷的數列為 定義threadedbinarytree 實現了線索化功能的二叉樹 class threadedbinarytree 過載一把threadednodes方法 public void threadednodes 遍歷線索化二叉樹的方法...
資料結構之 線索二叉樹
2 線索二叉樹 實現 對於一顆二叉樹而言 如下圖所示 每次我們想要查詢二叉樹裡面的乙個節點的時候,我們都必須遍歷這棵樹,以中序遍歷為例,遍歷的順序為4251637,當我們遍歷到標號為5這個節點的時候,如果有個指標指向5的前乙個節點2或者後乙個節點1的話,那麼我們跳轉到2或者1的效率肯定會大大的提公升...
資料結構 樹和二叉樹 二叉線索樹
遍歷二叉樹就是以一定的規則將二叉樹中的結點排列成乙個線性序列,從而得到二叉樹結點的各種遍歷序列。其實質就是對乙個非線性結構進行線性化操作,使在這個訪問序列中每乙個結點 除了第乙個和最後乙個 都有乙個直接前驅和直接後繼。在二叉樹的鏈式儲存中,只能體現出父子關係,不能直接得到結點在遍歷中的前驅和後繼。前...