二叉搜索树与双向链表 中序遍历的递归和栈解法
二叉搜索树与双向链表
http://www.nowcoder.com/questionTerminal/947f6eb80d944a84850b0538bf0ec3a5
//参考 c++二叉树:层序,前,中,后 序遍历的解题模板:https://blog.csdn.net/sinat_36338365/article/details/107916628 /*
class Solution {
public:
TreeNode* head=NULL,*L=NULL;
TreeNode* Convert(TreeNode* pRootOfTree)
{//中序遍历:左,根,右
//方法一:使用递归的中序遍历
if (!pRootOfTree)return pRootOfTree;
if(pRootOfTree->left)Convert(pRootOfTree->left);
if(head==NULL){ //其他都是中序遍历的模板,
head=pRootOfTree; //只有这一块是本道题需要额外附加的
L=head; //
} //
else{ //
L->right=pRootOfTree; //
pRootOfTree->left=L; //
L=pRootOfTree; //
} ////二叉树的前中后序遍历模板参考https://blog.csdn.net/sinat_36338365/article/details/107916628 if(pRootOfTree->right)Convert(pRootOfTree->right);
return head;
//方法二:非递归,采用stack堆栈的形式的中序遍历
/*TreeNode* p = pRootOfTree;
stack<TreeNode*> st;
TreeNode* head=NULL,*L=NULL;
while (p||!st.empty()) {
while (p) {
st.push(p);
p= p->left;
}
if(!st.empty()) {
p = st.top();
st.pop();
//cout << p->val << " ";//其他都是中序遍历的模板,
if(head==NULL){ //
head=p; //只有这一块是本道题需要额外附加的
L=p; //
} //
else { //
L->right=p; //
p->left=L; //
L=p; //
} //
// 二叉树的前中后序遍历模板参考:https://blog.csdn.net/sinat_36338365/article/details/107916628
p = p->right;
}
}
return head;*/
}
};
查看19道真题和解析