1027-实现二叉树的前序、中序和后序遍历

题目地址:牛客
在这里插入图片描述
算法思想:
首先题目给出了一个数组,根据输出的结果知道,2是左孩子,1是根节点,3是右孩子,因此可以直接遍历这棵树,当根节点不为空的时候递归遍历即可;
最后的结果输出的是一个二维数组,意思是第一行为前序遍历的结果;第二行为后续遍历的结果;第三行为后序遍历的结果。根据测试框给出的样式,该二维数组使用的是vector变长数组结构,因此需要先定义三个不同的前中后的遍历数组,通过使用引用的方式,直接在遍历时修改其结果。
最后将这三个不同的前中后数组定义为二维变长数组即可。

代码:

/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 * };
 */
#include <vector>
class Solution {
    
    
public:
    /**
     * 
     * @param root TreeNode类 the root of binary tree
     * @return int整型vector<vector<>>
     */
    void preorder(TreeNode * Root, vector<int> &data)
    {
    
    
        if(Root != NULL)
        {
    
    
            data.push_back(Root->val);
            preorder(Root->left, data);
            preorder(Root->right, data);
        }
        return;
    }
    void inorder(TreeNode* Root, vector<int> &data)
    {
    
    
        if( Root != NULL)
        {
    
    
            inorder(Root->left, data);
            data.push_back(Root->val);
            inorder(Root->right, data);
        }
        return;
    }
    void postorder(TreeNode* Root, vector<int> &data)
    {
    
    
        if(Root != NULL)
        {
    
    
            postorder(Root->left, data);
            postorder(Root->right, data);
            data.push_back(Root->val);
        }
         return;
    }
    vector<vector<int> > threeOrders(TreeNode* root) {
    
    
        // write code here
        vector<int> pre;
        vector<int> in;
        vector<int> post;
        preorder(root, pre);
        inorder(root, in);
        postorder(root, post);
            
        vector<vector<int> > res{
    
    pre, in, post};
        return res;
    }
};```

猜你喜欢

转载自blog.csdn.net/weixin_45885232/article/details/109321891