剑指offer36 二叉搜索树与双向链表的转换

    技术2023-09-15  110

    这个二叉搜索树转化为双向循环链表。链表中的每个节点都有一个前驱和后继指针; 对于双向循环链表,第一个节点的前驱是最后一个节点,最后一个节点的后继是第一个节点。 head指向当前节点的最小值; //因为这个是一个二叉搜索树,所以采用类似于中序遍历的方式,先找到其左节点中的最小值,然后再找到根节点,最后再找到其右节点;

    Node pre=null,head=null; public Node treeToDoublyList(Node root){ if(root==null) return null; helper(root); head.left=pre; pre.right=head; return head; } public void helper(Node root){ if(root==null) return ; //先遍历其左子树; helper(root.left); //左子树指向pre; root.left=pre; //如果前驱节点为空的话 就让head==ropt,表示是第一个最小的元素节点,然后让其head==root; //否则的话 就让pre.right==root; if(pre!=null) pre.right=root; else head=root; //让前驱节点指向root; pre=root; //接着遍历右子树; helper(root.right); }
    Processed: 0.008, SQL: 9