二叉樹的非遞迴遍歷

2021-06-18 10:34:43 字數 970 閱讀 7132

二叉樹的非遞迴遍歷需要用到棧,三種遍歷方法中最麻煩的是後序遍歷,因為它需要訪問根結點2次,故在第一次訪問的時候需要標示它的訪問狀態。

#include #include using namespace std;

typedef struct _tree tree;

typedef struct _visit visit;

void preprinttree(tree *root)

cout << endl;

}void inprinttree(tree *root)

while (!stk.empty())

} }cout << endl;

}void postprinttree(tree *root) ;

stk.push(v);

p = p->left;

} while (!stk.empty()) ; //修改訪問標誌為true,再次push當前結點

stk.push(v);

p = cur.node->right;

while (p != null) ;

stk.push(v);

p = p->left;

}} else

} cout << endl;

}int main()

; tree a2 = ;

tree a3 = ;

tree a4 = ;

tree a5 = ;

tree a6 = ;

tree a7 = ;

preprinttree(&a7);

inprinttree(&a7);

postprinttree(&a7);

return 0;

}

輸出:

7 5 1 2 6 3 4

1 5 2 7 3 6 4

1 2 5 3 4 6 7

二叉樹遍歷(遞迴 非遞迴)

二叉樹以及對二叉樹的三種遍歷 先根,中根,後根 的遞迴遍歷演算法實現,以及先根遍歷的非遞迴實現。node public class node public node left public node right public object value 遍歷訪問操作介面 public inte ce ...

二叉樹非遞迴遍歷

二叉樹非遞迴遍歷的幾個要點 1 不管前序 中序還是後序,它們的遍歷路線 或者說是回溯路線,先沿左邊一直走到盡頭,然後回溯到某節點,並跳轉到該節點的右孩子 如果有的話 然後又沿著這個有孩子的左邊一直走到盡頭 都是一樣的。2 明確每次回溯的目的。比如,前序回溯的目的是為了訪問右子樹 中序回溯的目的是為了...

非遞迴遍歷二叉樹

中序遞迴遍歷 void inordertrvdigui node pnode 然而,當樹的深度很大 比如16 時 假設為滿二叉樹 樹的節點數為 2 0 2 1 2 2 2 15 2 16 65536,遍歷整個二叉樹意味著有65536次函式呼叫,這將極大地增加程式執行時間。這時,應該採取非遞迴便利二叉...