基於迎春花開365天
利用棧實現二叉樹的先序、中序、後序遍歷的非遞迴操作
以及 alvin-qu
非遞迴,不用棧實現二叉樹中序遍歷 的演算法,本人對二叉樹的遍歷做出系統的總結(c++實現),包含先序、中序、後序的遞迴、棧實現、非遞迴非棧實現。其中以雙棧作為輔助資料結構的後序遍歷演算法,**於jimolangge123
二叉樹的後序遍歷實現(基於兩個棧實現)
先序遍歷的三種演算法:
//遞迴實現先序遍歷
void preordertree(binnode* root)
else
}//非遞迴實現先序遍歷(使用棧作為輔助資料結構)
void preordertree(binnode* root)
while(root||!stack.empty())
root=stack.top();
stack.pop();
root=root->right(); }}
//不使用棧,非遞迴先序遍歷bst
/* *每個節點有個parent指標進行回溯
*/void preordertree(binnode* root)
while(root->left())
while(root!=null)
} elsewhile(root!=null&&temp==root->right());
} }}
中序遍歷:
//遞迴實現中序遍歷
void inordertree(binnode* root)
else
}//非遞迴實現中序遍歷(使用棧作為輔助資料結構)
void inordertree(binnode* root)
while(root||!stack.empty())
root=stack.top();
stack.pop();
coutroot=root->right(); }}
//不使用棧,非遞迴中序遍歷bst
/* *每個節點有個parent指標進行回溯
*/void inordertree(binnode* root)
while(root->left())
while(root!=null)
} elsewhile(root!=null&&temp==root->right());
} }}
後序遍歷:
//遞迴實現後序遍歷
void postordertree(binnode* root)
else
}//非遞迴實現後序遍歷
/**使用雙棧作為輔助資料結構
*/void postordertree(binnode* root)
stack1.push(root);
while(!stack1.empty())
while(!stack2.empty())
}//不使用棧,非遞迴後序序遍歷bst
/* *每個節點有個parent指標進行回溯
*/void postordertree(binnode* root)
while(root->left())
while(root!=null)
} else
while(temp==root->right()||root)
} }}
二叉樹遍歷非遞迴實現(借助棧)
先序遍歷非遞迴實現 思路 使用棧來模擬遞迴的操作 迴圈條件 節點不為null,且棧不為空。如果當前節點不為空,把節點進棧,並且訪問節點 cout 節點指向其左孩子,直至左孩子為空。這時相當於左子樹已經遍歷完了,我們需要訪問右節點,將當前元素指向棧頂元素右孩子,彈出棧頂元素。c void preord...
基於棧的非遞迴方法實現二叉樹
include include include using namespace std struct binode typedef struct binode node typedef node linknode 以先序的順序編寫結點 linknode creattree linknode t el...
用棧實現二叉樹的遍歷(非遞迴)
先實現棧 include include include typedef char elemtype define stacksize 20 typedef struct st stack void init stack stack p 初始化棧 bool is empty stack p 判斷是否...