码迷,mamicode.com
首页 > 其他好文 > 详细

【二叉树】二叉树遍历总结

时间:2018-03-17 10:54:37      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:empty   void   tor   back   存在   top   return   efi   保存   

  节点定义如下

1 // Definition for a binary tree node.
2 struct TreeNode {
3     int val;
4     TreeNode *left;
5     TreeNode *right;
6     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
7 }

  前序遍历:

  若二叉树为空,则空操作返回,否则:

  1. 访问根节点
  2. 前序遍历根节点的左子树
  3. 前序遍历根节点的右子树  

  中序遍历:

  若二叉树为空,则空操作返回,否则:

  1. 中序遍历根节点的左子树
  2. 访问根节点
  3. 中序遍历根节点的右子树

  后序遍历:

  若二叉树为空,则空操作返回,否则:

  1. 后序遍历根节点的左子树
  2. 后序遍历根节点的右子树
  3. 访问根节点  

 

 

1. 递归方法

  前序遍历:

1 void preorderTraversal(TreeNode* root, vector<int>& nums) {
2     if(!root) return;
3     nums.push_back(root->val); // 访问根节点
4     preorderTraversal(root->left); // 前序遍历左子树
5     preorderTraversal(root->right); // 前序遍历右子树
6 }

  中序遍历:

void inorderTraversal(TreeNode* root, vector<int>& nums) {
    if(!root) return;   
    inorderTraversal(root->left, nums); // 中序遍历左子树
    nums.push_back(root->val);          // 访问根节点
    inorderTraversal(root->right, nums); // 中序遍历右子树
} 

  后序遍历:

1 void postorderTraversal(TreeNode* root, vector<int>& nums) {
2     if(!root) return;   
3     postorderTraversal(root->left, nums); // 后序遍历左子树
4     postorderTraversal(root->right, nums); // 后序遍历右子树
5     nums.push_back(root->val);            // 访问根节点
6 }

 

2.迭代方法(使用栈)

  前序遍历:

void preorderTraversal(TreeNode* root, vector<int>& nums) {
    TreeNode* cur = root;
   stack
<TreeNode* > st; while (cur || !st.empty()) { if (!cur) { // 根节点为空,则需要返回上一级 cur = st.top(); // 访问右子树,而右子树已被保存在栈中 st.pop(); } nums.push_back(cur->val); // 访问根节点 if (cur->right) st.push(cur->right); // 保存待遍历节点 cur = cur->left; // 继续访问左子树 } }

 

 

  

中序遍历:

 1 void inorderTraversal(TreeNode* root, vector<int>& nums) {
 2     TreeNode* cur = root;
 3     stack<TreeNode* > st; 
 4 
 5     while (cur || !st.empty()) {
 6         if (cur) {                                 // 找到最左节点并保存根节点
 7             st.push(cur);                     // 即访问左子树
 8             cur = cur->left;
 9         } else {                                  
10             cur = st.top();
11             st.pop();
12             nums.push_back(cur->val);    // 访问根节点
13             cur = cur->right;                      // 访问右子树
14         }
15     }
16 } 

 

【二叉树】二叉树遍历总结

标签:empty   void   tor   back   存在   top   return   efi   保存   

原文地址:https://www.cnblogs.com/Atanisi/p/8587303.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!