@LeetCode二叉树展开为链表--Flatten Binary Tree to Linked List[C++]

博客围绕将二叉树原地展开为链表的问题展开。先描述问题,接着给出解题思路,采用深度优先搜索进行先序遍历,将结点存入 vector ,再把每个结点左子结点置空,右子结点按先序遍历结果设置,最后可实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

@LeetCode二叉树展开为链表--Flatten Binary Tree to Linked List[C++]

问题描述

给定一个二叉树,原地将它展开为链表。
例如:
二叉树
将其展开为:
在这里插入图片描述

解题思路

观察链表,可以看出是先序遍历二叉树后依次放入链表中。因此,我们明确采用深度优先搜索。

先将根结点放入 vector 中,再遍历左子树直到空结点为止,之后遍历右子树直到空结点为止。不断深搜下去可以将二叉树完全遍历。

之后就是变成链表形式,可以看出链表还是基于二叉树形式形成的,只是将每个结点的左子结点为空,右子结点是先序遍历的结果。

基于以上思路,代码就可以实现。

程序实现

	/**
 	* Definition for a binary tree node.
 	* struct TreeNode {
 	*     int val;
 	*     TreeNode *left;
 	*     TreeNode *right;
 	*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 	* };
 	*/
	class Solution {
	public:
	    vector<TreeNode*> res;
	public:
	    void flatten(TreeNode* root) {
	        if (!root) return;
	        dfs(root);
	        int len = res.size();
	        res[0]->left = NULL;
	        for (int i = 0; i < len - 1; i++) {
    	        res[i]->right = res[i+1];
        	    res[i+1]->left = NULL;
        	}
    	}
    	void dfs(TreeNode* root) {
        	if (!root) return;
        	else {
            	res.push_back(root);
            	dfs(root->left);
            	dfs(root->right);
        	}
        	return;
    	}
	};

@2019.05.26 北京·怀柔

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值