二叉树展开为链表

原理:利用先序遍历,将当前结点的左子结点 接到 当前结点的 右子结点处。 将当前结点右子结点接到 右子结点最后一个右结点后面。 代码如下:

void flatten(struct TreeNode* root){
    
    if (root == NULL) return;
    //保存右结点
    struct TreeNode *oldRight = root->right;
    //将左结点接到右结点处
    root->right = root->left;
    //清空左结点
    root->left = NULL;
    //查找右边最后面一个右结点
    struct TreeNode *lastRight = root;
    while(lastRight->right != NULL)
        lastRight=lastRight->right;
    lastRight->right=oldRight;
    //处理右边结点
    flatten(root->right);
}

你可能感兴趣的:(二叉树展开为链表)