二叉树先序中序后序遍历

1.题目:牛客网 NC45 (实现二叉树先序,中序和后序遍历)

描述
分别按照二叉树先序,中序和后序打印所有的节点。
示例1
输入:
{
    
    1,2,3}
返回值:
[[1,2,3],[2,1,3],[2,3,1]]

2.二叉树的遍历

a.先序遍历:
如果二叉树为空,什么也不做。否则:
1)访问根节点
2)先序遍历左子树
3)先序遍历右子树

b.中序遍历:
如果二叉树为空,什么也不做。否则:
1)中序遍历左子树
2)访问根节点
3)中序遍历右子树

c.后序遍历:
如果二叉树为空,什么也不做。否则:
1)后序遍历左子树
2)后序遍历右子树
3)访问根节点

很明显,先中后序遍历都可以很方便地用递归实现。

3.代码实现

/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 * };
 */

class Solution {
    
    
public:
    /**
     * 
     * @param root TreeNode类 the root of binary tree
     * @return int整型vector<vector<>>
     */
    vector<vector<int> > threeOrders(TreeNode* root) {
    
    
        // write code here
        vector<int> xianxu;
        vector<int> zhongxu;
        vector<int> houxu;
        //二叉树先序遍历
        vector<vector<int> > res;
        res.push_back(PreOrder(root,xianxu));
        res.push_back(InOrder(root,zhongxu));
        res.push_back(PostOrder(root,houxu));
        return res;
        
    }
    vector<int> PreOrder(TreeNode* root,vector<int> &xianxu)
    {
    
    
        //vector<int> xianxu;
        if(root!=NULL)
        {
    
    
            xianxu.push_back(root->val);
            PreOrder(root->left,xianxu);
            PreOrder(root->right,xianxu);
        }
        return xianxu;
    }
    vector<int> InOrder(TreeNode* root,vector<int> &zhongxu)
    {
    
    
        //vector<int> zhongxu;
        if(root!=NULL)
        {
    
    
            InOrder(root->left,zhongxu);
            zhongxu.push_back(root->val);
            InOrder(root->right,zhongxu);
        }
        return zhongxu;
    }
    vector<int> PostOrder(TreeNode* root,vector<int> &houxu)
    {
    
    
        //vector<int> houxu;
        if(root!=NULL)
        {
    
    
            PostOrder(root->left,houxu);
            PostOrder(root->right,houxu);
            houxu.push_back(root->val);
        }
        return houxu;
    }
};

おすすめ

転載: blog.csdn.net/t18438605018/article/details/119894706