数据结构 - 二叉树的4种遍历方法

    技术2022-07-21  102

    引言

    二叉树有4种典型的遍历方法:前序、中序、后续、层序。每种遍历的方法在此不在赘述,主要给出四种方法的C++代码。

    首先设二叉树结点的数据结构如下:

    struct TreeNode{ int value; //结点值 TreeNode* left; //左孩子 TreeNode* right; //右孩子 TreeNode(int _value,TreeNode* _left,TreeNode* _right): value(_value),left(_left),right(_right){} };

    1、前序遍历

    递归:

    void preRecrusion(TreeNode* root){ if(root == NULL) return; std::cout << root->value << endl; //根 preRecrusion(root->left); //左 preRecrusion(root->right); //右 }

    非递归:

    void preRecrusion(TreeNode* root){ std::stack<TreeNode*> m_stack; //采用辅助栈来完成 while(root != NULL || !m_stack.empty()){ if(root != NULL){ std::cout<< root->value <<endl; //输出 m_stack.push(root); root = root->left; } else{ root = m_stack.top(); m_stack.pop(); root = root->right; } } }

    2、中序遍历

    递归:

    void inRecrusion(TreeNode* root){ if(root == NULL) return; inRecrusion(root->left); //左 std::cout << root->value << endl; //根 inRecrusion(root->right); //右 }

    非递归:

    void inRecrusion(TreeNode* root){ std::stack<TreeNode*> m_stack; //采用辅助栈来完成 while(root != NULL || !m_stack.empty()){ if(root != NULL){ m_stack.push(root); root = root->left; } else{ root = m_stack.top(); std::cout<< root->value <<endl; //输出 m_stack.pop(); root = root->right; } } }

    3、后序遍历

    递归:

    void postRecrusion(TreeNode* root){ if(root == NULL) return; postRecrusion(root->left); //左 postRecrusion(root->right); //右 std::cout << root->value << endl; //根 }

    非递归:

    void postRecrusion(TreeNode* root){ std::stack<TreeNode*> m_stack; //采用辅助栈来完成 TreeNode* lastvisit = root; while(root != NULL || !m_stack.empty()){ if(root != NULL){ m_stack.push(root); root = root->left; } else{ root = m_stack.top(); if(root->right == NULL || root->right == lastvisit){ std::cout<< root->value <<endl; //输出 m_stack.pop(); lastvisit = root; root = NULL; } else{ root = root->right; } } } }

     

    Processed: 0.014, SQL: 9