首页 > 其他分享 >LeetCode 114. 二叉树展开为链表

LeetCode 114. 二叉树展开为链表

时间:2023-05-27 10:33:24浏览次数:39  
标签:pre right 链表 114 二叉树 flatten NULL root left

思路1

class Solution {
public:
    void flatten(TreeNode* root) {
        while(root)
        {
            auto p=root->left;
            if(p)//找到左儿子的右链
            {
                while(p->right) p=p->right;
                //将右链插入
                p->right=root->right;
                root->right=root->left;
                root->left=NULL;
            }
            //此时root已经没有左孩子,往右孩子遍历
            root=root->right;
        }
    }
};

思路2

class Solution {
public:
    TreeNode* pre=NULL;//记录遍历顺序的前继节点
    void flatten(TreeNode* root) {//
        if(!root)   return;
        if(pre)
        {
            pre->right=root;
            pre->left=NULL;
        }
        pre=root;
        auto r=root->right,l=root->left;
        flatten(l);
        flatten(r);
    }
};

标签:pre,right,链表,114,二叉树,flatten,NULL,root,left
From: https://www.cnblogs.com/tangxibomb/p/17436385.html

相关文章

  • #yyds干货盘点# LeetCode程序员面试金典:二叉树展开为链表
    题目:给你二叉树的根结点root,请你将它展开为一个单链表:展开后的单链表应该同样使用TreeNode,其中right子指针指向链表中下一个结点,而左子指针始终为null。展开后的单链表应该与二叉树先序遍历顺序相同。 示例1:输入:root=[1,2,5,3,4,null,6]输出:[1,null,2,null,3,null,4,......
  • 653.最大二叉树
    给定一个不重复的整数数组 nums。 最大二叉树 可以用下面的算法从 nums递归地构建:创建一个根节点,其值为 nums中的最大值。递归地在最大值 左边 的 子数组前缀上 构建左子树。递归地在最大值右边的 子数组后缀上 构建右子树。返回 nums构建的最大二叉树 ......
  • 剑指 Offer 24. 反转链表
    剑指Offer24.反转链表</br></br>题目:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例:输入:1->2->3->4->5->NULL输出:5->4->3->2->1->NULL限制:0<=节点个数<=5000</br></br>思路一:双指针法:可以通过改变链表中节点的next指针的指......
  • 代码随想录算法训练营第十五天|102. 二叉树的层序遍历、226. 翻转二叉树、101. 对称二
    【参考链接】102.二叉树的层序遍历 【注意】1.队列先进先出,符合一层一层遍历的逻辑,而用栈先进后出适合模拟深度优先遍历也就是递归的逻辑。而这种层序遍历方式就是图论中的广度优先遍历,只不过我们应用在二叉树上。2.遍历的时候要记录队列的大小。就可以知道哪些元素是第几层......
  • 【蓝桥杯入门不入土】变幻莫测的链表
    @[toc]一:链表的类型单链表什么是链表,链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针的意思)。链表的入口节点称为链表的头结点也就是head。如图所示:双链表单链表中的指针域只......
  • 图解LeetCode——24. 两两交换链表中的节点
    一、题目给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。二、示例2.1>示例1:【输入】head=[1,2,3,4]<br>【输出】[2,1,4,3]2.2>示例2:【输入】head=[]<br>【输出】[]2.3>示例......
  • 【剑指offer】-把二叉树打印成多行-43/67
    1.题目描述从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。2.题目分析非常经典的一道二叉树的题目,做这道题之前需要掌握二叉树的思想和BFS(广度优先搜索、队列思想)我们可以回顾一下最基本的层次遍历,我们是用一个队列来进行存储初始root结点,然后依次放入root的......
  • 【力扣每日一题】144. 二叉树的前序遍历
    1.题目描述2.题目解析非常典型的一道二叉树题目思路一:递归求解思路二:迭代求解3.题目代码3.1递归**publicIList<int>PreorderTraversal(TreeNoderoot){List<int>list=newList<int>();Tree(root,list);returnlist;......
  • LeetCode 222. 完全二叉树的节点个数
    classSolution{public:intcountNodes(TreeNode*root){if(!root)return0;autol=root->left,r=root->right;intx=1,y=1;//记录左右两边层数while(l)l=l->left,x++;while(r)r=r->right,y++;......
  • 加分二叉树
    题目描述设一个\(n\)个节点的二叉树\(\text{tree}\)的中序遍历为\((1,2,3,\ldots,n)\),其中数字\(1,2,3,\ldots,n\)为节点编号。每个节点都有一个分数(均为正整数),记第\(i\)个节点的分数为\(d_i\),\(\text{tree}\)及它的每个子树都有一个加分,任一棵子树\(\text{subtree}\)......