对于程序员而言,用递归来实现二叉树的遍历可以节省大量的代码;但是对于系统而言,递归的效率却显得十分低下,这时我们也可以使用迭代的方法来提高效率。下面我分别研究了二叉树前序遍历、中序遍历以及后续遍历的递归和迭代实现方法。
二叉树的数据结构定义:
struct TreeNode {//二叉树数据结构
int val;//二叉树结点值
struct TreeNode* left;//左子树
struct TreeNode* right;//右子树
TreeNode(int v) : val(v), left(NULL), right(NULL) {};//自定义构造函数
};
前序遍历的递归实现:
void preorderTraversal1(TreeNode* root) {//二叉树前序遍历递归实现
if (root) {
cout << root->val << " ";
preorderTraversal1(root->left);
preorderTraversal1(root->right);
}
}
前序遍历的迭代实现:
vector<int> preorderTraversal(TreeNode* root) {//前序遍历迭代实现
vector<int> result;
if (root == NULL)
return result;
stack<TreeNode*> stack1;
stack1.push(root);
while (!stack1.empty()) {