将二叉树拆成链表

    xiaoxiao2021-04-17  50

    1、问题描述

           将一棵二叉树按照前序遍历拆解成为一个假链表。所谓的假链表是说,用二叉树的 right 指针,来表示链表中的 next 指针。样例

    1 \ 1 2 / \ \ 2 5 => 3 / \ \ \ 3 4 6 4 \ 5 \ 6

    2、实现思路

          按前序遍历,先找到左子树的最右叶子节点,其next为根节点的右子树,根的左子树就变为右子树了,改变根节点为原根节点的右子树,重复之前步骤,直至左子树为空。

    3、代码

    /**  * Definition of TreeNode:  * class TreeNode {  * public:  *     int val;  *     TreeNode *left, *right;  *     TreeNode(int val) {  *         this->val = val;  *         this->left = this->right = NULL;  *     }  * }  */ class Solution { public:     /**      * @param root: a TreeNode, the root of the binary tree      * @return: nothing      */     void flatten(TreeNode *root) {         // write your code here         if(root==NULL)  return ;           while(root!=NULL)           {   TreeNode *p=new TreeNode;               p=root->left;             if(p!=NULL)             {   while(p->right!=NULL)                 p=p->right;                   p->right = root->right;                   root->right = root->left;                   root->left = NULL;               }              root = root->right;           }       }   };  

    4、感想

          要将左儿子标记为 null,否则会得到空间溢出或是时间溢出。重复操作找到左子树的最右叶子节点,其next为根节点的右子树,根的左子树就变为右子树了,改变根节点为原根节点的右子树,直至没有左子树。

    转载请注明原文地址: https://ju.6miu.com/read-674003.html

    最新回复(0)