二叉搜索树与双向链表

来源:互联网 发布:淘宝玩乐收藏类目 编辑:程序博客网 时间:2024/06/05 07:40

题目

输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。

思路

中序非递归遍历二叉搜索树,每次记录当前遍历出来的节点的pre节点,把上个节点的right指针指向它,当前节点的left指针指向上一个节点,然后把当前节点更新成pre节点,因为二叉搜索树进行中序遍历是排序的,所以最后形成的链表就是排序的,注意先处理一下第一个节点。

参考代码

/*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)    {        if (!pRootOfTree) return nullptr;        stack<TreeNode*> st;        TreeNode* root, *p = pRootOfTree, *pre;        bool first = true;        while (p || !st.empty()) {            if (p) {                while (p) {                    st.push(p);                    p = p->left;                }            }            TreeNode* top = st.top();            st.pop();            if (first) {                root = top;                pre = top;                first = false;            } else {                pre->right = top;                top->left = pre;                pre = top;            }            p = top->right;        }        return root;    }};
原创粉丝点击