LintCode_453 将二叉树拆成链表

题目

将一棵二叉树按照前序遍历拆解成为一个假链表。所谓的假链表是说,用二叉树的 right 指针,来表示链表中的 next 指针。

样例

              1
               \
     1          2
    / \          \
   2   5    =>    3
  / \   \          \
 3   4   6          4
                     \
                      5
                       \
                        6
思路
left = root->left;
right = root->right;
p = left->right的最后一个节点
如果有left节点
{
  root->left = NULL;
  root->right = left;
  left->right = right;
}
然后递归
C++代码
void flatten(TreeNode *root) {
	// write your code here
	if (root)
	{
		TreeNode* left = root->left;
		TreeNode* right = root->right;
		TreeNode* p = root;
		flatten(root->left);
		flatten(root->right);
		if (left)
		{
			p = root->left;
			while (p->right)
			{
				p = p->right;
			}
			root->left = NULL;
			root->right = left;
			p->right = right;
		}
	}
}

  

 
posted @ 2016-05-03 00:22  红岸的电波  阅读(490)  评论(0编辑  收藏  举报