力扣将二叉排序树转为递增类链表 897. Increasing Order Search Tree

         将二叉排序树转为类链表,一种简单方法可以中序遍历将结果保存到数组中,遍历该数组创建类链表返回;该方法较为繁琐。

方法二:

        在中序遍历过程中改变指针的指向使其左孩子的右指针指向父节点,父节点左孩子指针置空;因为中序遍历先为最左节点,左右孩子均为空,所以需要一个哑结点和一个指向当前孩子节点的指针;

        然后从最左侧孩子开始,将哑结点右孩子指向根节点,根节点左孩子置空,当前节点向上移动到根节点;依次向上回溯改变指针指向,这里一个特殊情况,当node节点为temp的右子节点时,依旧正确,此时temp指向右孩子,向上回溯到祖父节点改变指向即可,中序遍历完成即为答案。

本博客源自力扣,对该题做进一步讲解,加深理解

 

class Solution {
private:
    TreeNode *temp;
public:
    void inorder(TreeNode *node) {
        if(node == nullptr)return;
        inorder(node->left);
        //孩子节点右孩子指针指向父节点
        temp->right = node;
        //左节点置空
        node->left = nullptr;
        //移动临时指针,递归生成链表
        temp = node;
        inorder(node->right);
    }

    TreeNode* increasingBST(TreeNode* root) {
        TreeNode *dumbNode = new TreeNode(-1);
        temp = dumbNode;
        inorder(root);
        return dumbNode->right;
    }
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值