JZ26:二叉搜索树与双向链表
二叉搜索树与双向链表
http://www.nowcoder.com/practice/947f6eb80d944a84850b0538bf0ec3a5
/**二叉搜索树的中序遍历就是递增的排序,所以就运用中序遍历方法来做。 * 算法思想: * 中序遍历的步骤,只不过在递归的中间部分不是输出节点值,而是调整指针指向。 * 10 * /\ * 5 12 * /\ * 4 7 * 步骤记住就行,第一次执行,到4的时候,head和resulthead都指向这个 * 指针调整的其中一步:4是head 5是pRootOfTree 然后调整head右指向5,5左指向4, * 然后5变成head就行了。 */
public class TreeNode{ int value; TreeNode left; TreeNode right; public TreeNode(int value){ this.value=value; } } TreeNode head=null;//表示转换后最后一个节点 TreeNode resultHead=null;//表示将二叉搜索树转为双向链表后的第一个节点 public TreeNode Convert(TreeNode pRootOfTree){ ConverSub(pRootOfTree); return resultHead; } public void ConverSub(TreeNode pRootOfTree){ if(pRootOfTree==null){ return ; } ConverSub(pRootOfTree.left); if(head==null){ head=pRootOfTree; resultHead=pRootOfTree; } else{//将根节点加入双向链表中,设置左右连接 head.right=pRootOfTree; pRootOfTree.left=head; head=pRootOfTree; } ConverSub(pRootOfTree.right); }
剑指Offer题解 文章被收录于专栏
剑指Offer-Java版本题解