递归将二叉树转换为双向链表

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 17:20   1238   0

总体思路是递归,将二叉树转换为记录了头尾指针的双向链表,函数如下

void convertTreeToListHelp(TreeNode *root, TreeNode *&head, TreeNode *&tail)
{
 head = root;
 tail = root;
 if (!root) return;
 TreeNode *pLeftHead = NULL;
    TreeNode *pLeftTail = NULL;
    convertTreeToListHelp(root->left, pLeftHead, pLeftTail);
    TreeNode *pRightHead = NULL;
    TreeNode *pRightTail = NULL;
    convertTreeToListHelp(root->right, pRightHead, pRightTail);
    if (pLeftTail)
    {
        head = pLeftHead;
        pLeftTail->right = root;
        root->left= pLeftTail;
    }
    if (pRightHead)
    {
        tail = pRightTail;
        root->right = pRightHead;
        pRightHead->left = root;
    }
}


上述过程稍显罗嗦

更为简洁的方式如下:

TreeNode *head = NULL;
TreeNode *tail = NULL;
TreeNode convertTreeToList(TreeNode *root)
{
 If (root == NULL)  return NULL;
 convertTreeToList(root->left);
 Root->left = tail;
 if (tail == NULL)
  tail = head = root;
 else
  Tail->right = root;
 Tail = root;
 convertToList(root->right);
 return head;
}


分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP