概述
题目链接
- 前序
- 中序
- 后序
前序
递归
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
// 递归的参数
// 递归的逻辑
// 递归的返回条件
vector<int> df(TreeNode* root, vector<int> &res) {
if (root != NULL) {
res.push_back(root->val);
}
if (root->left != NULL) {
df(root->left, res);
}
if (root->right != NULL) {
df(root->right, res);
}
return res;
}
vector<int> preorderTraversal(TreeNode* root) {
// initial ??
vector<int> res;
if (root == NULL) {
return res;
}
return df(root, res);
}
};
// 总结代码不够精炼
// 并且在写的时候没有考虑到一些空指针的情况
// 别人代码都是从空开始的,我是从非空开始的,所以导致代码看着很别扭
// 别人的代码
class Solution {
public:
void traversal(TreeNode* cur, vector<int>& vec) {
if (cur == NULL) return;
vec.push_back(cur->val); // 中
traversal(cur->left, vec); // 左
traversal(cur->right, vec); // 右
}
vector<int> preorderTraversal(TreeNode* root) {
vector<int> result;
traversal(root, result);
return result;
}
};
迭代统一代码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
// 迭代法(统一风格)7:20
vector<int> preorderTraversal(TreeNode* root) {
vector<int> res;
stack<TreeNode*> st;
if (!root) return res;
st.push(root);
// 中左右的顺序遍历,右左中入栈
while (!st.empty()) {
TreeNode* node = st.top();
if (node) {
st.pop();// 出
if (node->right) st.push(node->right);
if (node->left) st.push(node->left);
st.push(node);// 入
st.push(NULL);
}
else {
st.pop();
node = st.top();
st.pop();
res.push_back(node->val);
}
}
return res;
}
};
后序和中序
- 同理只是将入栈顺序改变一下
最后
以上就是谦让路人为你收集整理的二叉树的遍历前中后(递归、非递归统一写法)前序的全部内容,希望文章能够帮你解决二叉树的遍历前中后(递归、非递归统一写法)前序所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复