2022-7-5 二叉树-递归

剑指 Offer 36. 二叉搜索树与双向链表

难度中等

输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。

 1 /*
 2 // Definition for a Node.
 3 class Node {
 4     public int val;
 5     public Node left;
 6     public Node right;
 7 
 8     public Node() {}
 9 
10     public Node(int _val) {
11         val = _val;
12     }
13 
14     public Node(int _val,Node _left,Node _right) {
15         val = _val;
16         left = _left;
17         right = _right;
18     }
19 };
20 */
21 class Solution {
22     public Node treeToDoublyList(Node root) {
23         if (root==null) return null;
24         if (root.left==null&&root.right==null) {
25             root.left=root;
26             root.right=root;
27             return root;
28         }
29         Node leftHead=treeToDoublyList(root.left);
30         Node rightHead=treeToDoublyList(root.right);
31         if (leftHead!=null) {
32             Node temp=leftHead.left;
33             temp.right = root;
34             root.left = temp;
35         }else{
36             leftHead=root;
37         }
38         if (rightHead!=null){
39             Node temp=rightHead.left;
40             temp.right=leftHead;
41             leftHead.left=temp;
42             root.right=rightHead;
43             rightHead.left=root;
44         }else{
45             root.right=leftHead;
46             leftHead.left=root;
47         }
48         return leftHead;
49     }
50 }

思路:对于root,将左子树的循环与本身还有右子树的循环队列拼接,需要注意 递归函数的作用。

posted on 2022-07-05 12:19  阿ming  阅读(12)  评论(0编辑  收藏  举报

导航