【二叉树问题】递归与非递归实现链表的前序、中序、后序遍历

无论是递归方法还是非递归方法,时间复杂度为O(N),N为二叉树节点个数。额外空间复杂度为O(L),L为二叉树的层数。

递归方法实现前序、中序、后序遍历

注意vector<int>result进行引用传递的做法:
 

引用传递
方法1:
void DLR(vector<int> & result2){
...//此函数修改result2,主函数中result会有同样的改变
result2.push_back(val1);//调用push_back方法用'.'
}
int main(){
vector<int>result;
DLR(result);//调用函数
}


方法2:
void DLR(vector<int> * result2){
...//此函数修改result2,主函数中result会有同样的改变
//调用push_back方法用'->'
result2->push_back(val2);
}
int main(){
vector<int>result;
DLR(&result);//调用函数
}

值传递情况下,对形参的修改不会影响实参

值传递
void DLR(vector<int>  result2){
...//此函数修改result2,主函数中result会有同样的改变
result2.push_back(val1);//调用push_back方法用'.'
}
int main(){
vector<int>result;
DLR(result);//调用函数后result1仍为null
}

代码实现

/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};*/

class TreeToSequence {
public:
    void DLR(vector<int>& result1,TreeNode* root)//先序遍历
    {
   
        
        if(root == NULL){
            return;
        }
        result1.push_back(root->val);
        DLR(result1,root->left);
        DLR(result1,root->right);
        
    }
    
    void LDR(vector<int>& result2,TreeNode* root)//中序遍历
    {
      
        
        if(root == NULL){
            return;
        }
        LDR(result2,root->left);
        result2.push_back(root->val);
        LDR(result2,root->right);
        
    }
     
    void LRD(vector<int>& result3,TreeNode* root)//后序遍历
    {
        if(root == NULL){
            return;
        }
        LRD(result3,root->left);
        LRD(result3,root->right);
        result3.push_back(root->val);
        
        
    }
    vector<vector<int> > convert(TreeNode* root) {
        // write code here
       vector <vector<int>> result;
       vector<int>result1;
       vector<int>result2;
       vector<int>result3;
       DLR(result1,root);
       LDR(result2,root);
       LRD(result3,root);
       result.push_back(result1);
       result.push_back(result2);
       result.push_back(result3);
       return result;
     }
};

猜你喜欢

转载自blog.csdn.net/gulaixiangjuejue/article/details/85452415