输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
左子树即链表的左边,右子树同理。多返回值以避免冗余的迭代。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
|
class Solution { public: void DoConvert(TreeNode *root, TreeNode *&head, TreeNode *&tail) { if (root != nullptr) { if (root->left) { DoConvert(root->left, head, root->left); root->left->right = root; } else { head = root; } if (root->right) { DoConvert(root->right, root->right, tail); root->right->left = root; } else { tail = root; } } } TreeNode *Convert(TreeNode *root) { if (root == nullptr) { return nullptr; } else { TreeNode *head, *tail; DoConvert(root, head, tail); return head; } } };
|