二叉树转换为双向链表(后序遍历)

本文介绍了如何将二叉树转换为双向链表,采用后序遍历的方法。通过递归实现转换过程,并提供了完整的C++代码示例,展示从输入二叉树到输出双向链表的转换及打印结果。
摘要由CSDN通过智能技术生成
#include <iostream>

using namespace std;

struct TreeNode
{
	int val;
	TreeNode *left;
	TreeNode *right;
	TreeNode(int v = 0, TreeNode *l = nullptr, TreeNode *r = nullptr) : val(v), left(l), right(r) {}
};

pair<TreeNode *, TreeNode *> convert(TreeNode *root)
{
	if (!root) return make_pair(nullptr, nullptr);

	TreeNode *left = nullptr, *right = nullptr;
	auto pl = convert(root->left);
	auto pr = convert(root->right);
	if (pl.second)
	{
		root->left = pl.second;
		pl.second->right = root;
		left = pl.first;
	}
	else
	{
		root->left = nullptr;
		left = root;
	}
	if (pr.first)
	{
		root->right = pr.first;
		pr.first->left = root;
		right = pr.second;
	}
	else
	{
		root->right = nullptr;
		right = root;
	}
	return make_pair(left, right);
}

TreeNode *convert2list(TreeNode *root)
{
	return convert(root).first;
}

void output_tree(TreeNode *r)
{
	if (!r) re
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值