前序遍历
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
vector<int> final_list;
return PreorderTraversal(root,final_list);
}
private:
vector<int> PreorderTraversal(TreeNode* root,vector<int> &final_list ){
if(root==NULL)
return final_list;
final_list.push_back(root->val);
PreorderTraversal(root->left,final_list);
PreorderTraversal(root->right,final_list);
return final_list;
}
};
这里需要注意的是内嵌函数的第二个参数需要用引用&,
博主用的是递归法,算法时间复杂度比较高;
下面提供迭代法:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
stack<TreeNode *> nodes;
vector<int> result;
if(root!=NULL)
nodes.push(root);
while(!node.empty()){
TreeNode *cur=nodes.top();
nodes.pop();
result.push_back(cur->val);
if(cur->right!=NULL)
nodes.push(cur->right);
if(cur->left!=NULL)
nodes.push(cur->left);
}
result result;
}
};
第二个算法用时0ms
中序遍历
中序遍历的代码只要将迭代循环的三行转变下顺序就可以了
代码如下:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
vector<int> result;
return InorderTraversal(root,result);
}
private:
vector<int> InorderTraversal(TreeNode* root,vector<int> &result){
if(root==NULL)
return result;
InorderTraversal(root->left,result);
result.push_back(root->val);
InorderTraversal(root->right,result);
return result;
}
};
后序遍历
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<int> postorderTraversal(TreeNode* root) {
vector<int> result;
return InorderTraversal(root,result);
}
private:
vector<int> PostorderTraversal(TreeNode* root,vector<int> &result){
if(root==NULL)
return result;
PostorderTraversal(root->left,result);
PostorderTraversal(root->right,result);
result.push_back(root->val);
return result;
}
};