本文主要是介绍【注释详细,思路清晰】【打卡第14天】leetcode热题HOT100之Java实现:114. 二叉树展开为链表,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1、题目描述
给你二叉树的根结点 root ,请你将它展开为一个单链表:
展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。
展开后的单链表应该与二叉树 先序遍历 顺序相同。
2、思路分析
① 将左子树插入到右子树的地方
② 将右子树接入到左子树的最右边的结点
③ 考虑右子树会不会右左结点,一直重复以上步骤,知道右子树为空
1
/ \
2 5
/ \ \
3 4 6//将 1 的左子树插入到右子树的地方
1
\
2 5
/ \ \
3 4 6
//将原来的右子树接到左子树的最右边节点
1
\
2
/ \
3 4
\
5
\
6
//将 2 的左子树插入到右子树的地方
1
\
2
\
3 4
\
5
\
6
//将原来的右子树接到左子树的最右边节点
1
\
2
\
3
\
4
\
5
\
6
3、代码实现
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*//**思想:*/
class Solution {public void flatten(TreeNode root) {while(root != null){// 判断左子树是否为空,现在就找左子树if(root.left == null){root = root.right;}else {TreeNode pre = root.left;// 寻找左子树的最右边的结点while(pre.right != null){pre = pre.right;} // 将整个右子树,放到左子树的最右边的结点pre.right = root.right;// 将左子树移动到右子树上去root.right = root.left;// 将左子树设置成nullroot.left = null;// 继续往右子树上走,看看有没有左子树root = root.right;}}}
}
对于算法,多刷就行了。没办法的。
这篇关于【注释详细,思路清晰】【打卡第14天】leetcode热题HOT100之Java实现:114. 二叉树展开为链表的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!