牛客网刷题之二叉搜索树与双向链表

来源:互联网 发布:mac版战网客户端 编辑:程序博客网 时间:2024/06/18 04:29

题目描述:

这里写图片描述

解题思路:

  二叉搜索树又名排序树,特点的是如果不为空,那么左子树必定小于根节点,而右子树必定大于根节点。题目要求转换为排序的双向链表,其实就相当于中序遍历该二叉搜索树但要加入双向指针:可以使后继结点的左指针指当前结点,同时当前结点的右指针指向后继,最后使后继结点等于当前结点。

题解:

//递归法TreeNode later = null;    public TreeNode Convert(TreeNode pRootOfTree) {        if (pRootOfTree == null) {            return null;        }        Convert(pRootOfTree.right);        if (later == null) {            later = pRootOfTree;        } else {            later.left = pRootOfTree;            pRootOfTree.right = later;            later = pRootOfTree;        }        Convert(pRootOfTree.left);        return later;    }

ac结果:

这里写图片描述
另附非递归法:

 public TreeNode Convert(TreeNode pRootOfTree) {        if (pRootOfTree == null) {            return null;        }        Stack<TreeNode> s = new Stack<>();        TreeNode later = null;        while(pRootOfTree != null || ! s.isEmpty()){            if(pRootOfTree != null){                s.push(pRootOfTree);                pRootOfTree = pRootOfTree.right;            }else{                pRootOfTree = s.pop();                if(later == null){                    later = pRootOfTree;                }else{                    later.left  = pRootOfTree;                    pRootOfTree.right = later;                    later = pRootOfTree;                }                pRootOfTree = pRootOfTree.left;            }        }        return later;    }
0 0
原创粉丝点击