c_cpp 将二叉树平铺到就地链接列表。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 将二叉树平铺到就地链接列表。相关的知识,希望对你有一定的参考价值。

http://stackoverflow.com/questions/15939582/flatten-binary-search-to-in-order-singly-linked-list-c





//========================================
// recursive. Code below is hard to read if no context. It implement in pre-order
// traversal, as shown in http://www.programcreek.com/2013/01/leetcode-flatten-binary-tree-to-linked-list/
void flatten(TreeNode *r) {
    if(!r) return;
    flatten(r->left);
    if(r->left == NULL) return; // !!!
    
    flatten(r->right);
    
    TreeNode *p = r->left;
    while(p->right) p = p->right;
    p->right = r->right;
    r->right = r->left;
    r->left = NULL;
}

//========================================
// iterative
void flatten(TreeNode *r) {
    while(r) {
        if(r->left) {
            TreeNode *p = r->left;
            while(p->right) p = p->right;
            p->right = r->right;
            r->right = r->left;
            r->left = NULL;
        }
        r = r->right;
    }
}

以上是关于c_cpp 将二叉树平铺到就地链接列表。的主要内容,如果未能解决你的问题,请参考以下文章

java - 如何使用堆栈安全(基于堆)递归将二叉树转换为java中的列表?

将二叉树每个节点的左右子树互换

如何创建将二叉树转换为元组的函数?

利用JAVA语言,将二叉树封装在一个类中,要求实现二叉树的构造,并实现二叉树的遍历操作。

453 将二叉树拆成链表

java宽度优先将二叉树存成数组