题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
代码:
class Solution {
public:
TreeNode* Convert(TreeNode* root)
{
if(root==NULL)return root;
stack<TreeNode *>s;
TreeNode *list=NULL,*p=root;
TreeNode *pre=NULL;
while(p||!s.empty()){
if(p){
s.push(p);
p=p->left;
}else{
p=s.top();s.pop();
if(list==NULL){
list=p;
pre=p;
}else{
pre->right=p;
p->left=pre;
pre=p;
}
p=p->right;
}
}
return list;
}
};
笔记:二叉树非递归算法,进栈顺序是前序遍历顺序,出栈顺序是后序遍历顺序。