常規的線索化方式
採用遞迴地呼叫的方式,判定條件是當前指標的左子樹是否為空
**實現:
public
void
midorder()
system.out.
println
(this);
if(this
.right != null)
}
對比:
但是對二叉樹進行線索化之後,不存在空的左右指標,但是單獨設定每乙個指標的型別,故而條件修改為指標的型別。
我的**
public
void
midlist()
system.out.
print
(this
+" ");
if(this
.getrighttype()
!=1)}
問題分析與總結:
出現空指標異常,因為到最後乙個節點時,其右指標是沒有改變,仍舊為null,並且沒有對其值進行修改,故而會出現空指標。
**修改
public
void
midlist()
if(this
!= null)if(
this
.getrighttype()
!=1&&this
.getright()
!= null)
}
分析與總結:
針對最尾結點的情況進行修改,尾節點的右指標始終為空,增加判定條件即可
教程**:
public
void
threadlist()
//退出迴圈就是當前的最左邊的節點,並且列印當前節點
system.out.
println
(hero)
;//然後開始判定總共是兩種情況,一種左右結點不為空,另一種是左右節點為空
//如果是左右都不為後繼節點,而是對應的子樹
//如果是左右都是後繼節點,直接輸出
while
(hero.
getrighttype()
==1) hero = hero.
getright()
;}
分析與總結:
保證每一次的迴圈開始都是從對應子樹最左邊的葉子結點進行迴圈,都是左指標指向對應前驅節點開始的。
while
(hero.
getlefttype()
==0)
如果當前傳入的結點的右指標所指為後繼結點,那就直接輸出後繼結點,如果不是,那就再往右開始迴圈。
while(hero.
getlefttype()
==1)hero = hero.
getright()
;
線索化二叉樹以及遍歷線索化二叉樹
1.線索二叉樹基本介紹 n個結點的二叉鍊錶中含有n 1 公式 2n n 1 n 1 個空指標域。利用二叉鍊錶中的空指標域,存放指向該結點在某種遍歷次序下的前驅和後繼結點的指標 這種附加的指標稱為 線索 這種加上了線索的二叉鍊錶稱為線索鍊錶,相應的二叉樹稱為線索二叉樹 threaded binaryt...
線索二叉樹遍歷
1.對二叉樹線索化之後,若結點沒有右子樹,則右子樹指向遍歷後繼結點 若沒有左子樹,則左子樹指向遍歷前驅結點。2.對線索二叉樹進行遍歷,即不斷找結點的後繼。若右指標直接指向了後繼,那直接就有了 結點右指標沒有指向後繼,即有右子節點,那就通過常規方法找到後繼。如後序線索樹後繼不好找,需要棧才能進行遍歷。...
二叉樹的線索化 線索二叉樹的遍歷(中序)
二叉樹的線索化 對於n個節點的二叉樹,在二叉儲存鍊錶中有n 1個空鏈域,利用這些空鏈域存放某種遍歷次序下的指向該節點的前驅和後繼的指標,這些指標成為線索,被線索的二叉樹成為線索二叉樹。這種加上了線索的二叉鍊錶稱為線索鍊錶,相應的二叉樹稱為線索二叉樹 threaded binarytree 根據線索性...