二叉树--前、中、后序遍历

c++

Posted by YiMiTuMi on May 15, 2023

前序遍历、中序遍历、后序遍历

前序遍历: 根节点 左子树的前序遍历结果  右子树的前序遍历结果 

中序遍历: 左子树的中序遍历结果 根节点 右子树的中序遍历结果

后序遍历: 左子树的后序遍历结果 右子树的后序遍历结果 根节点

这三种遍历方式主要用来做序列化(如保存到数组中)方便数据的传递。序列化后可以通过:

中序遍历 + 前序遍历

中序遍历 + 后序遍历

来还原二叉树结构,无法通过

前序遍历 + 后序遍历

来还原树结构,没有中序遍历是无法获取左右子树的数量!

前序遍历 (根 左 右)

//前序遍历 (根 左 右 )
void PreOrderTree(TreeNode* root, vector<int> &vecProOrder)
{
    if (root == NULL)
    {
        return;
    }

    //先输出当前根节点
    printf("%d ", root->val);
    vecProOrder.push_back(root->val);

    //左节点
    PreOrderTree(root->left, vecProOrder);

    //右节点
    PreOrderTree(root->right, vecProOrder);

}

中序遍历 (左 根 右)

//中序遍历 (左 根 右 )
void InOrderTree(TreeNode* root, vector<int>& vecInOrder)
{
	if (root == NULL)
	{
		return;
	}

	//左节点
    InOrderTree(root->left, vecInOrder);

    //先输出当前根节点
	printf("%d ", root->val);
    vecInOrder.push_back(root->val);

	//右节点
    InOrderTree(root->right, vecInOrder);

}

后序遍历 (左 右 根)

//后序遍历 (左 右  根)
void PostOrderTree(TreeNode* root, vector<int>& vecPostOrder)
{
	if (root == NULL)
	{
		return;
	}

	//左节点
    PostOrderTree(root->left, vecPostOrder);

	//右节点
    PostOrderTree(root->right, vecPostOrder);

	//先输出当前根节点
	printf("%d ", root->val);
	vecPostOrder.push_back(root->val);

}