题解 | #二叉搜索树与双向链表#

二叉搜索树与双向链表

https://www.nowcoder.com/practice/947f6eb80d944a84850b0538bf0ec3a5

/*
struct TreeNode {
	int val;
	struct TreeNode *left;
	struct TreeNode *right;
	TreeNode(int x) :
			val(x), left(NULL), right(NULL) {
	}
};*/
class Solution {
public:
    TreeNode* Convert(TreeNode* pRootOfTree) {

		TreeNode* cur=pRootOfTree;
		if(cur==nullptr)
		return nullptr;
		stack<TreeNode*> st;
		vector<TreeNode*> num;
		TreeNode* pre=nullptr;
		TreeNode* head;
		while(!st.empty() || cur)
		{
			while(cur)
			{
				st.push(cur);
				cur=cur->left;
			}
			//左树访问完了.
			auto node=st.top();
			if(pre==nullptr)
			{
				head=node;
				pre=node;
			}else
			{
				pre->right=node;
				node->left=pre;
				pre=node;
			}
			st.pop();
			//num.push_back(node);
			cur=node->right;
		}
		return head;


		//保存顺序在链接。也可以直接使用一个pre和head来搞.
        // int n=num.size();
		// for(int i=0;i<n-1;i++)
		// {
		// 	num[i]->right=num[i+1];
		// 	num[i+1]->left=num[i];
		// }
		//return num[0];
    }
};

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务