zl程序教程

您现在的位置是:首页 >  其他

当前栏目

二叉树与双向链表_26

2023-04-18 16:10:33 时间

思路:

  1. 明确Convert函数的功能。 输入:输入一个二叉搜索树的根节点。 过程:将其转化为一个有序的双向链表。 输出:返回该链表的头节点。
  2. 明确成员变量pLast的功能。 pLast用于记录当前链表的末尾节点。
  3. 明确递归过程。 递归的过程就相当于按照中序遍历,将整个树分解成了无数的小树,然后将他们分别转化成了一小段一小段的双向链表。再利用pLast记录总的链表的末尾,然后将这些小段链表一个接一个地加到末尾。
  /**
     * 已排链表的最后一个结点
     */
    private TreeNode lastNode=null;
 
 
    public TreeNode Convert(TreeNode pRootOfTree) {
        if (pRootOfTree==null){
            return null;
        }
 
        //获取其左子树双向链表的头结点
        TreeNode head = Convert(pRootOfTree.left);
 
        // 如果左子树为空,那么根节点root为此时双向链表的头节点
        if (head==null){
            head=pRootOfTree;
        }
 
        //连接当前结点和之前的链表
        pRootOfTree.left=lastNode;
        if (lastNode!=null) {
            lastNode.right=pRootOfTree;
        }
         
        //更新最后一个结点
        lastNode=pRootOfTree;
 
         
        //安排右节点
        Convert(pRootOfTree.right);
 
        return  head;
    }