lintcode_453

一道简单的题目:将一棵二叉树按照前序遍历拆解成为一个假链表。所谓的假链表是说,用二叉树的 right 指针,来表示链表中的 next 指针。
这里写图片描述
就用这个来作为我的第一篇博客吧。因为这里我开始写的是递归的写法,然后想迭代的方法的时候,瞄了一眼答案,就写出来这东西。平时都偷懒写递归,以后要多写迭代了,这代码很简单,就不解释了,反正这个也没人看,就我自己的记录而已。这一篇就这样吧。

class Solution {
public:
    /**
     * @param root: a TreeNode, the root of the binary tree
     * @return: nothing
     */
    void flatten(TreeNode *root) {
        // write your code here
        if(NULL == root)
            return;
        //迭代方法:
        //因为观察得知,这个的规律是当前的root的右孩子放在他左孩子的
        //最右节点的后面。root的右孩子按照题意肯定是他的左孩子。
        //所以可以就这这规律写出这代码。
        while(root){
            if(root->left){
                TreeNode *pre = root -> left;
                while(pre->right)
                    pre=pre->right;
                pre->right = root->right;
                root->right = root->left;
                root->left = NULL;
            }
            root = root->right;
        }
    }
    //递归函数。使用时候直接调用即可。
    //分析状态即可,当前root的右孩子是排好序的左孩子。
    //左孩子的右孩子是排好序的右孩子的head。注意检测下NULL就行
    TreeNode *change(TreeNode *root){
        if(NULL == root)
            return NULL;
        TreeNode * head,*left,*right;
        head = root;
        left = head->left;
        right = head -> right;
        head->left=NULL;
        left=change(left);
        right = change(right);
        head->right=left;
        if(left!=NULL){
            while(left->right!=NULL)
            left = left->right;
            left->right = right;
        }
        else{
            head->right = right;
        }
        return head;
    }
};
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值