二叉树的非递归遍历,这个实现的是先根遍历
// Traverse-Tree.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include<iostream> #include<vector> using namespace std; struct BiNOde { int ele; BiNOde* lnode; BiNOde* rnode; }; BiNOde*create_tree() { BiNOde * root = new BiNOde; BiNOde*node1 = new BiNOde; BiNOde*node2 = new BiNOde; BiNOde*node3 = new BiNOde; BiNOde*node4 = new BiNOde; BiNOde*node5 = new BiNOde; BiNOde*node6 = new BiNOde; BiNOde*node7 = new BiNOde; BiNOde*node8 = new BiNOde; BiNOde*node9 = new BiNOde; BiNOde*node10 = new BiNOde; BiNOde*node11 = new BiNOde; root->ele = 0; node1->ele = 1; node2->ele = 2; node3->ele = 3; node4->ele = 4; node5->ele = 5; node6->ele = 6; node7->ele = 7; node8->ele = 8; node9->ele = 9; node10->ele = 10; node11->ele = 11; root->lnode = node1; root->rnode = node2; node1->lnode = node3; node1->rnode = node4; node2->lnode = node7; node2->rnode = node8; node3->lnode = node5; node3->rnode = node11; node4->lnode = node10; node4->rnode = NULL; node5->lnode = node6; node5->rnode = NULL; node6->lnode = NULL; node6->rnode = NULL; node7->lnode = node9; node7->rnode = NULL; node8->lnode = NULL; node8->rnode = NULL; node9->lnode = NULL; node9->rnode = NULL; node10->lnode = NULL; node10->rnode = NULL; node11->lnode = NULL; node11->rnode = NULL; //BiNOde*node12 = new BiNOde; //node12->ele = 12; //node12->lnode = NULL; //node12->rnode = NULL; //node6->lnode = node11; return root; } vector<BiNOde*>expand(BiNOde*node) { cout << node->ele << endl; vector<BiNOde*>aaa; while (node != NULL) { if (node->lnode!=NULL) cout << node->lnode->ele << endl; if (node->rnode != NULL) aaa.push_back(node->rnode); node = node->lnode; } return aaa; } void Traverse(BiNOde*root) { vector<vector<BiNOde*>>aa; if (root == NULL) return; vector<BiNOde*>aaa = expand(root); if (aaa.empty()) return; aa.push_back(aaa); while (!aa.empty()) { while (aa.back().empty()) { aa.pop_back(); if (aa.empty()) return; } BiNOde*n = aa.back().back(); aa.back().pop_back(); aaa = expand(n); if (!aaa.empty()) { aa.push_back(aaa); } } } int _tmain(int argc, _TCHAR* argv[]) { BiNOde*root = create_tree(); Traverse(root); system("pause"); return 0; }
版权声明: