【问题标题】:Preorder traversal for Nary treesNary树的前序遍历
【发布时间】:2021-04-07 19:24:49
【问题描述】:

我还是 Java 的初学者。我刚刚了解了二叉搜索树和前序遍历的概念,以及如何使用递归来实现二叉树的前序遍历。像这样的:

Void preorder(node root){
if(root==null){//base case when node becomes null we stop recursive function
return ;}
System.out.print(root.data+" ");// printing the value of node as first time we visit
Preorder(root.left);// look at left side of tree ,once left side complete
Preorder(root.right);// start having a look at right side of that specific node
}

但是,如何为 N ary 树实现相同的递归模型?每个节点的子节点数不一定是 2?因为那么 .left 和 .right 将不适用,不是吗?如果需要提供更多代码,请lmk,谢谢。

【问题讨论】:

    标签: java tree


    【解决方案1】:

    这棵树可以有 n 个孩子,而不是只有两个孩子。因此,您需要将孩子建模为列表,例如ArrayList:

    class Node {
        String data;
        List<Node> children = new ArrayList<>();
    
        public void addChild(Node node) {
            this.children.add(node);
        }
        
    }
    

    然后在前序遍历中遍历孩子:

    void preorder(Node node) {
        if (node == null) {
            return;
        }
        System.out.print(node.data + " ");
        for (Node child : node.children) {
            preorder(child);
        }
    }
    

    【讨论】:

    • 感谢您的回答。是否可以将两部分代码合并在一起?就像给 preorder 方法提供第二个参数一样,该参数将是 arraylist 子项?那么递归将如何工作?
    • @Ides784 你的意思是把孩子传递给像preorder(root, root.children); 这样的方法?为什么要这么做?您已经可以从第一个参数访问子级。
    猜你喜欢
    • 1970-01-01
    • 2021-03-08
    • 2017-03-14
    • 1970-01-01
    • 1970-01-01
    • 2023-01-09
    • 1970-01-01
    • 2021-03-14
    • 1970-01-01
    相关资源
    最近更新 更多