Day14 二叉树力扣打卡

一、二叉树的遍历

  • 144.二叉树的前序遍历(opens new window)
  • 94.二叉树的中序遍历(opens new window)
  • 145.二叉树的后序遍历

递归算法的三个要素:

1、确定递归函数的参数和返回值;

void traversal(TreeNode* cur, vector& vec)

2、确定终止条件,防止栈溢出;

if (cur == NULL) return;

3、确定单层递归的逻辑。(以前序遍历为例)

vec.push_back(cur->val);    // 中
traversal(cur->left, vec);  // 左
traversal(cur->right, vec); // 右

前序遍历C++代码如下:

class Solution {
public:
    void traversal(TreeNode* cur, vector& vec) {
        if (cur == NULL) return;
        vec.push_back(cur->val);    // 中
        traversal(cur->left, vec);  // 左
        traversal(cur->right, vec); // 右
    }
    vector preorderTraversal(TreeNode* root) {
        vector result;
        traversal(root, result);
        return result;
    }
};

中序遍历C++代码如下:

void traversal(TreeNode* cur, vector& vec) {
    if (cur == NULL) return;
    traversal(cur->left, vec);  // 左
    vec.push_back(cur->val);    // 中
    traversal(cur->right, vec); // 右
}

后序遍历C++代码如下:

void traversal(TreeNode* cur, vector& vec) {
    if (cur == NULL) return;
    traversal(cur->left, vec);  // 左
    traversal(cur->right, vec); // 右
    vec.push_back(cur->val);    // 中
}

二、二叉树的迭代遍历

递归的实现就是:每一次递归调用都会把函数的局部变量、参数值和返回地址等压入调用栈中,然后递归返回的时候,从栈顶弹出上一次递归的各项参数,所以这就是递归为什么可以返回上一层位置的原因。

你可能感兴趣的:(leetcode,算法,数据结构,c++)