二叉树展开为链表

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

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);
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容