[leetcode]114. 二叉树展开为链表

发布时间 2023-06-24 17:46:03作者: 飞鸣镝

总结:怎样写递归函数?关键是把递归函数的功能定义清楚,并在递归函数体中使用自身来做事,此时不要关注递归函数执行的细节。也就是写高层级代码的时候不要关注低层级的事情,这就叫抽象。关注也没有用,想不清楚的。

 

 1 class Solution {
 2     public void flatten(TreeNode root) {
 3         flatten_(root);
 4     }
 5     //展开root子树
 6     private void flatten_(TreeNode root){
 7         if(root==null){
 8             return ;
 9         }
10 
11         flatten_(root.left);
12         flatten_(root.right);
13 
14         TreeNode left=root.left;
15         TreeNode right=root.right;
16         //把左子树对应的链表挂到root.right;root.left置空
17         root.right=left;
18         root.left=null;
19         
20         //找到left链表的尾节点,把右子树对应的链表挂上去
21         TreeNode p=left;
22         while(left!=null){
23             p=left;
24             left=left.right;
25         }
26 
27         if(p==null) root.right=right;
28         else p.right=right;
29     }
30 }