二叉搜索树与双向链表

来源:互联网 发布:电信网络电视怎么开通 编辑:程序博客网 时间:2024/06/11 23:52

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


/*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 == NULL) return NULL;        TreeNode* tail = NULL;   //设tail为双向链表的最后一个节点        Change(pRootOfTree, &tail);                TreeNode* head = tail;   //设head为双向链表的第一个节点        while(head -> left != NULL) {            head = head -> left;        }        return head;    }    void Change(TreeNode* node, TreeNode** tail) {        TreeNode* temp = node;        if(node -> left != NULL) {            Change(node -> left, tail);        }        //将当前节点加在双向链表的最后        //先使当前的节点与链表的最后一个节点互指        temp -> left = *tail;           if(*tail != NULL) {     //注意这里一定要加判断条件        (*tail) -> right = temp;        }        //将当前节点赋给最后一个节点        *tail = temp;        if(node -> right != NULL) {            Change(node -> right, tail);}    }};


0 0
原创粉丝点击