题解 | 实现二叉树先序,中序和后序遍历

import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 *   public TreeNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param root TreeNode类 the root of binary tree
     * @return int整型二维数组
     */
    public void rootFront(TreeNode currentNode, StringBuffer sb) {
        if (currentNode == null) return;
        sb.append(currentNode.val + ",");
        rootFront(currentNode.left, sb);
        rootFront(currentNode.right, sb);
    }

    public void rootMiddle(TreeNode currentNode, StringBuffer sb) {
        if (currentNode == null) return;
        rootMiddle(currentNode.left, sb);
        sb.append(currentNode.val + ",");
        rootMiddle(currentNode.right, sb);
    }

    public void rootBack(TreeNode currentNode, StringBuffer sb) {
        if (currentNode == null) return;
        rootBack(currentNode.left, sb);
        rootBack(currentNode.right, sb);
        sb.append(currentNode.val + ",");
    }

    public int[][] threeOrders(TreeNode root) {
        // write code here
        if (root == null) {
            return new int[3][0];
        } else {
            int[][] result = new int[3][];
            StringBuffer fsb = new StringBuffer();
            StringBuffer msb = new StringBuffer();
            StringBuffer bsb = new StringBuffer();
            rootFront(root, fsb);
            rootMiddle(root, msb);
            rootBack(root, bsb);

            int[] fa = Arrays.stream(fsb.deleteCharAt(fsb.length() -
                                     1).toString().split(",")).mapToInt(value -> Integer.valueOf(value)).toArray();
            int[] ma = Arrays.stream(msb.deleteCharAt(msb.length() -
                                     1).toString().split(",")).mapToInt(value -> Integer.valueOf(value)).toArray();
            int[] ba = Arrays.stream(bsb.deleteCharAt(bsb.length() -
                                     1).toString().split(",")).mapToInt(value -> Integer.valueOf(value)).toArray();


            result[0] = fa;
            result[1] = ma;
            result[2] = ba;
            return result;
        }

    }
}

其实遍历二叉树的递归写法大家都知道,这次主要提醒一下复制同样逻辑代码后相关变量要修改清楚。边复制边改,不然最后一次性改可能改漏。

全部评论

相关推荐

Git的工作流程通常包括以下几个步骤:https://www.nowcoder.com/issue/tutorial?zhuanlanId=Mg58Em&uuid=f818c6d22c98401682f8662612b9e57f克隆(Clone):首先,通过克隆一个远程仓库到本地,创建一个本地仓库的副本。这样可以在本地进行开发和修改。添加和修改(Add and Modify):在本地仓库中进行代码的添加和修改。开发者可以通过添加新文件、修改现有文件或删除文件来进行开发工作。暂存(Stage):将修改的文件添加到暂存区(也称为索引),准备提交到版本库。暂存区相当于一个缓冲区,用于存放即将提交的修改。提交(Commit):将暂存区的修改提交到版本库。每次提交都会生成一个唯一的提交记录,包含了修改的详细信息,如作者、时间戳和提交消息。推送(Push):将本地的提交推送到远程仓库,与团队成员共享代码。推送操作将本地的提交同步到远程仓库,使得其他人可以看到和使用这些修改。拉取(Pull):从远程仓库拉取最新的代码更新到本地仓库。当其他人推送了新的修改到远程仓库时,开发者可以通过拉取操作获取这些更新。合并(Merge):将不同分支的修改合并到一起。当开发者在不同的分支上进行并行开发时,可以使用合并操作将分支的修改合并到主分支或其他分支上。冲突解决(Conflict Resolution):当多个分支对同一文件进行了不同的修改时,可能会发生冲突。开发者需要手动解决这些冲突,选择保留哪些修改或进行修改的合并。这些步骤构成了Git的基本工作流程。通过这个工作流程,开发者可以有效地管理代码的版本、协作开发和跟踪修改历史。#ai智能作图#
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务