static
void
bfs(node root)
if(node.right!=null)
}}
static
void
iterativepreorder
(node root)
}
static
void
stackpreorder
(node root)
else
}}
static
void
stackinorder
(node root)
else
}}
static
void
stackpostorder
(node root)
while
(!stack2.
isempty()
)}
static
void
stackpostorder
(node root)
cur= stack.
pop();
//當前左孩子是空或者被訪問過,還需要判斷右孩子是否為空或被訪問過,滿足條件即可列印當前(根)結點
if(cur.right==null||cur.right==lastvisited)
//右孩子未被訪問過,把當前結點設定為其右孩子,進行下次迭代
else
}}
static
void
morrisinorder
(node root)
else
//已經遍歷過左子樹了,把左子樹的最右葉子節點線索清除,開始遍歷右子樹
if(pre.right==cur)
//設定左子樹最右葉子節點的線索為當前節點,即當前節點的前驅,開始遍歷左子樹
else}}
}
static
void
morrispreorder
(node root)
else
//已經遍歷過左子樹了,把左子樹的最右葉子節點線索清除,開始遍歷右子樹
if(pre.right==cur)
//設定左子樹最右葉子節點的線索為當前節點,即當前節點的前驅,列印當前節點後,開始遍歷左子樹
else}}
}
static
void
morrispostorder
(node root)
else
//已經遍歷過左子樹了,把左子樹的最右葉子節點線索清除,開始遍歷右子樹
if(pre.right==cur)
//設定左子樹最右葉子節點的線索為當前節點,即當前節點的前驅,開始遍歷左子樹
else}}
reverseprint
(root);}
static
void
reverseprint
(node node)
}
二叉樹遍歷 非遞迴演算法
文庫文章 二叉樹前序遍歷 根 左結點 右結點 所以在訪問到乙個節點不為空時 先訪問此結點,然後把此結點的非空右孩子先入棧,然後再把非空左孩子入棧。具體 如下 二叉樹後序非遞迴演算法 第二種思路 要保證根結點在左孩子和右孩子訪問之後才能訪問,因此對於任一結點p,先將其入棧。如果p不存在左孩子和右孩子,...
二叉樹遍歷非遞迴演算法
輸入 include include define maxsize 100 typedef char elemtype using namespace std typedef struct node btnode 建立二叉樹 void createbtnode btnode b,char str j...
二叉樹遍歷非遞迴演算法
遞迴演算法非常的簡單。先訪問跟節點,然後訪問左節點,再訪問右節點。如果不用遞迴,那該怎麼做呢?仔細 一.先序遍歷 看一下遞迴程式,就會發現,其實每次都是走樹的左分支 left 直到左子樹為空,然後開始從遞迴的最深處返回,然後開始恢復遞迴現場,訪問右子樹。由於一直走到最左邊後,需要逐步返回到父節點訪問...