二叉搜索树转换为排序的双向链表递归调用题解

public class Solution {
     //定义链表的最后一个节点
     TreeNode tail = null; 
    //链表的第一个节点
    TreeNode head = null;  

    public TreeNode Convert(TreeNode pRootOfTree) {
        ConvertSub(pRootOfTree);
        return head;
    }
    //构造一个递归函数中序遍历二叉树
    private void ConvertImpl(TreeNode pRootOfTree) {
        if(pRootOfTree==null) return;
         //递归遍历左子树
        ConvertSub(pRootOfTree.left);    
        //左子树为空,这个条件的触发在:左子树的最左节点
        if (tail == null) {             
             //根节点即为尾节点
            tail = pRootOfTree;         
            head = pRootOfTree;
        }
        else {
            //把根节点连接到左子树的末尾
            tail.right = pRootOfTree;    
            pRootOfTree.left = tail;
            //更新尾节点
            tail = pRootOfTree;          
        }
          //递归遍历右子树
        ConvertImpl(pRootOfTree.right); 
    }

}
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务