線索化二叉樹

2022-07-30 17:15:09 字數 4767 閱讀 4757

線索化二叉樹的特點是:每乙個節點都有前驅和後繼節點(第乙個和最後乙個除外)所以查詢某一節點會很容易

缺點:也很明顯就是在插入新節點和刪除時過於麻煩,實際應用需自己取捨

public

class

threadedbinarytreedemo

}class

threadedbinarytree

//過載

public

void

threadednodes()

public

void

threadednodes(heronode node)

if (node.getleft() == null

)

//後繼節點

if (pre != null && pre.getright() == null

)

//讓當前節點是下乙個節點的前驅節點

pre =node;

if (node.getlefttype()!=1)

if (node.getrighttype()!=1)

////

線索化左子樹

//threadednodes(node.getleft());

////

線索化當前節點

////

前驅節點

//if (node.getleft() == null)

////

後繼節點

//if (pre != null && pre.getright() == null)

////

讓當前節點是下乙個節點的前驅節點

//pre = node;

////

線索化右子樹

//threadednodes(node.getright());

//threadednodes(node.getleft());

//threadednodes(node.getright());

//if (node.getleft() == null)

////

後繼節點

//if (pre != null && pre.getright() == null)

////

讓當前節點是下乙個節點的前驅節點

//pre = node;

}

//遍歷線索化二叉樹

public

void

threadedlist()

system.out.println(node);

node =node.getright();

}//while (node != null)

//while (node.getrighttype() == 1)

//node = node.getright();//}

//while ( node != null && node.getlefttype() == 0 )

//while (node != null) else

//pre = node;

//node = node.getparent();

//} else //}

//}//}

} //前

public

void

preorder()

else

}//中

public

void

infixorder()

else

}//後

public

void

postorder()

else

}//查詢

public heronode preordersearch(int

no)

else

}public heronode infixordersearch(int

no)

else

}public heronode postordersearch(int

no)

else

}//刪除

public

void delnode(int

no)

else

} else

}public

void del(int

no)

else

} else

}}class

heronode

public

void

setparent(heronode parent)

private

int lefttype;//

0 指向左子樹 1 指向前驅節點

private

int righttype;//

0 指向右子樹 1 指向後繼節點

public heronode(int

no, string name)

public

intgetno()

public

void setno(int

no)

public

string getname()

public

void

setname(string name)

public

heronode getleft()

public

void

setleft(heronode left)

public

heronode getright()

public

void

setright(heronode right)

public

intgetlefttype()

public

void setlefttype(int

lefttype)

public

intgetrighttype()

public

void setrighttype(int

righttype)

@override

public

string tostring()

/*是什麼遍歷看什麼時候輸出父節點

*///

前序遍歷

public

void

preorder()

if (this.right != null

) }

//中序遍歷

public

void

infixorder()

system.out.println(

this

);

if (this.right != null

) }

//後續遍歷

public

void

postorder()

if (this.right != null

) system.out.println(

this

); }

//前序查詢

public heronode preordersearch(int

no)

heronode resnode = null

;

if (this.left != null

)

if (resnode != null

)

if (this.right != null

)

return

resnode;

}//中序查詢

public heronode infixordersearch(int

no)

if (resnode != null

)

if (this.no ==no)

if (this.right != null

)

return

resnode;

}//後序查詢

public heronode postordersearch(int

no)

if (resnode != null

)

if (this.right != null

)

if (resnode != null

)

if (this.no ==no)

return

resnode;

}public

void delnode(int

no)

if (this.right != null && this.right.no ==no)

if (this.left != null

)

if (this.right != null

) }

public

void del(int

no)

if (this.right != null && this.right.no ==no)

else

}if (this.left != null

)

if (this.right != null

) }

}

線索化二叉樹以及遍歷線索化二叉樹

1.線索二叉樹基本介紹 n個結點的二叉鍊錶中含有n 1 公式 2n n 1 n 1 個空指標域。利用二叉鍊錶中的空指標域,存放指向該結點在某種遍歷次序下的前驅和後繼結點的指標 這種附加的指標稱為 線索 這種加上了線索的二叉鍊錶稱為線索鍊錶,相應的二叉樹稱為線索二叉樹 threaded binaryt...

線索化二叉樹

define crt secure no warnings 1 includeusing namespace std enum pointertag 列舉 其結構如下 void prevorderthreading 前序 void postorderthreading 後序 void inorder...

線索化二叉樹

二叉樹是一種非線性結構,遍歷二叉樹幾乎都是通過遞迴或者用棧輔助實現非遞迴的遍歷。用二叉樹作為儲存結構時,取到乙個節點,只能獲取節點的左孩子和右孩子,不能直接得到節點的任一遍歷序列的前驅或者後繼。為了儲存這種在遍歷中需要的資訊,我們利用二叉樹中指向左右子樹的空指標來存放節點的前驅和後繼資訊.二叉樹的結...