题解 | #牛群的树形结构展开#

牛群的树形结构展开

https://www.nowcoder.com/practice/07caea5438394f58afbe72cbe2eb2189

考察的知识点:二叉树的展开;

解答方法分析:

  1. 首先判断根节点是否为空,如果为空,则直接返回。
  2. 使用迭代的方式,从根节点开始遍历二叉树。
  3. 对于每个节点,如果存在左子树,则找到左子树最右侧的节点,并将其右子树连接到该节点后面。
  4. 将当前节点的右子树指针指向左子树,并将左子树指针置为空。
  5. 移动当前节点指针到下一个节点,继续执行2-4步骤,直到遍历完整个二叉树。
  6. 返回展开后的二叉树的根节点。

所用编程语言:C++;

完整编程代码:↓

/**
 * struct TreeNode {
 *  int val;
 *  struct TreeNode *left;
 *  struct TreeNode *right;
 *  TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 * };
 */
class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param root TreeNode类
     * @return TreeNode类
     */
    TreeNode* flattenTree(TreeNode* root) {
        if (!root) {
            return nullptr;
        }
        
        TreeNode* pre = nullptr;
        TreeNode* curr = root;
        
        while (curr) {
            if (curr->left) {
                pre = curr->left;
                while (pre->right) {
                    pre = pre->right;
                }
                
                pre->right = curr->right;
                curr->right = curr->left;
                curr->left = nullptr;
            }
                 
            curr = curr->right;
        }
        

        return root;
    }

};

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务