思考方式:递归的实现机制是用栈实现的;用递归遍历实现前序(中左右)遍历:
- 确定递归函数的参数(根节点,数组)和返回值(void);void traversal(cur, vec)
- 确定终止条件;if(cur==NULL)return;
- 确定单层递归的逻辑。
vec.push(cur->val);用数组存放我们当前要处理的节点(中)
traversal(cur->left, vec);向左去遍历(左)
traversal(cur->right, vec);向右去遍历(右)
写前中后序的依据:改变以上代码顺序(按中间根节点的顺序前中后)
前序遍历:
定义二叉树:
struct TreeNode{
int val;
TreeNode *left;
TreeNode *right;
TreeNode(): val(0), left(NULL), right(NULL){}
TreeNode(int x): val(x), left(NULL); right(NULL){}
TreeNode(int x, TreeNode *left, TreeNode *right): val(x), left(NULL), right(NULL){}
};
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)l;
return result;
}
}
中序遍历:
class Soultion{
public:
void traversal(TreeNode* cur, vector<int> vec){
if(cur==NULL)return;
traversal(cur->left, vec);
vec.push_back(cur->val);
traversal(cur->right, vec);
}
vector<int> preorderTraversal(TreeNode* root) {
vector<int> result;
traversal(root, result);
return result;
}
}
后序遍历:
class Soultion{
public:
void traversal(TreeNode* cur, vector<int> vec){
if(cur==NULL)return;
traversal(cur->left, vec);
traversal(cur->right, vec);
vec.push_back(cur->val);
}
vector<int> preorderTraversal(TreeNode* root) {
vector<int> result;
traversal(root, result);
return result;
}
}