题目
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
思路
二叉搜索树的特点就是左子树的值小于父节点,右子树的值大于父节点。所以使用二叉树的中序遍历就可以得到排序的链表了。
代码
using System.Collections.Generic;
/*
public class TreeNode
{
public int val;
public TreeNode left;
public TreeNode right;
public TreeNode (int x)
{
val = x;
}
}*/
class Solution
{
public TreeNode Convert(TreeNode pRootOfTree)
{
// write code here
List<TreeNode> list=new List<TreeNode>();
Stack<TreeNode> stack=new Stack<TreeNode>();
if(pRootOfTree==null)
return pRootOfTree;
if(pRootOfTree.left==null && pRootOfTree.right==null)
return pRootOfTree;
while(pRootOfTree!=null || stack.Count>0)
{
if(pRootOfTree!=null)
{
stack.Push(pRootOfTree);
pRootOfTree=pRootOfTree.left;
}
else if(stack.Count>0)
{
pRootOfTree=stack.Pop();
list.Add(pRootOfTree);
pRootOfTree=pRootOfTree.right;
}
}
TreeNode node;
TreeNode node2;
pRootOfTree=list[0];
node=pRootOfTree;
node.left=null;
for(int i=1;i<list.Count;i++)
{
node2=list[i];
node.right=node2;
node2.left=node;
node=node2;
}
return pRootOfTree;
}
}