最後一個遞歸調用語句所保留的參數沒有意義這類遞歸因其在算法最後通常被稱為尾遞歸 可不用棧且將其(遞歸)消除 如中序遍歷遞歸算法中最後的遞歸語句inorder (bt>rchild)可改為下列語句段
bt=bt>rchild;
while (bt>rchild!=null)
{inorder (bt >lchild); printf(%cbt >data);//訪問根結點假定結點數據域為字符
bt=bt >rchild; }
在二叉鏈表表示的二叉樹中 引入線索的目的主要是便於查找結點的前驅和後繼因為若知道各結點的後繼二叉樹的遍歷就變成非常簡單二叉鏈表結構查結點的左右子女非常方便但其前驅和後繼是在遍歷中形成的為了將非線性結構二叉樹的結點排成線性序列 利用結點的空鏈域左鏈為空時用作前驅指針右鏈為空時作為後繼指針再引入左右標記ltag 和rtag 規定ltag=lchild 指向左子女ltag=時lchild指向前驅當rtag=時 rchild指向右子女rtag=時rchild 指向後繼這樣在線索二叉樹(特別是中序線索二叉樹)上遍歷就消除了遞歸也不使用棧(後序線索二叉樹查後繼仍需要棧)
[] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] []
From:http://tw.wingwit.com/Article/program/sjjg/201311/22643.html