乘一先生 2023-12-25 14:44 采纳率: 33.3%
浏览 5
已结题

Java插入Tree树作为p的最后一颗子树

就是这段代码我想把C的节点树插入到B的节点树中去,但是运行结果是空,怎么修改才能变成我要的C啊

//题目:  TreeNode<T> insert(TreeNode<T> p, Tree<T> tree)     //插入tree树(深拷贝)作为p的最后一棵子树

import java.util.Stack;

public class TreeNode<T> {
    private T data;//节点数据
    private TreeNode<T> parent;//节点的父节点
    private Stack<TreeNode<T>> children;//节点的子节点栈

    public TreeNode(T data) {  //初始化
        this.data = data;
        this.parent = null;
        this.children = new Stack<>();
    }

    //用于在指定的父节点p下插入一个子树tree
    public void insert(TreeNode<T> p, Tree<T> tree) {
        TreeNode<T> copiedTree = tree.deepCopy();//对tree进行深拷贝
        p.getChildren().push(copiedTree);//将p的子树压入父节点的子节点栈中
        copiedTree.setParent(p);//设置拷贝后的子树的父节点为p
        
    }

    // Getters and setters

    public T getData() {
        return data;
    }//获取节点数据

    public void setData(T data) {
        this.data = data;//接受类型为T的参数
    }

    public TreeNode<T> getParent() {
        return parent;//获取节点的父节点
    }

    public void setParent(TreeNode<T> parent) {
        this.parent = parent;//设置节点的父节点
    }

    public Stack<TreeNode<T>> getChildren() {
        return children;//获取节点的子节点栈
    }

    public void setChildren(Stack<TreeNode<T>> children) {
        this.children = children;//设置节点的子节点栈
    }
    
    public static void main(String[] args) {
        //创建树节点
        TreeNode<String> nodeA=new TreeNode<>("A");
        TreeNode<String> nodeB=new TreeNode<>("B");
        nodeB.setChildren(new Stack<>());
        TreeNode<String> nodeC=new TreeNode<>("C");
        
        //创建树
        Tree<String>tree=new Tree<>(nodeB);
        //在节点B下插入节点C的完整树结构
        nodeB.insert(nodeC, tree);
        
        //输出节点B的子节点(包含插入的节点C的完整树结构)
        for (TreeNode<String>child:nodeB.getChildren()) {            
            System.out.println(child.getData());
        }
    }
}

  • 写回答

18条回答 默认 最新

  • 叫兽-郭老师 新星创作者: Java技术领域 2023-12-25 16:54
    关注
    获得0.45元问题酬金

    您好,我这边帮您修改了下代码,效果图:

    img

    参考代码:

    import java.util.Stack;
    
    public class TreeNode<T> {
        private T data;
        private TreeNode<T> parent;
        private Stack<TreeNode<T>> children;
    
        public TreeNode(T data) {
            this.data = data;
            this.parent = null;
            this.children = new Stack<>();
        }
    
        public void insert(TreeNode<T> p, Tree<T> tree) {
            TreeNode<T> copiedTreeRoot = tree.deepCopy();
            p.children.push(copiedTreeRoot);
            copiedTreeRoot.setParent(p);
        }
    
        // getters and setters...
    
    
        public T getData() {
            return data;
        }//获取节点数据
    
        public void setData(T data) {
            this.data = data;//接受类型为T的参数
        }
    
        public TreeNode<T> getParent() {
            return parent;//获取节点的父节点
        }
    
        public void setParent(TreeNode<T> parent) {
            this.parent = parent;//设置节点的父节点
        }
    
        public Stack<TreeNode<T>> getChildren() {
            return children;//获取节点的子节点栈
        }
    
        public void setChildren(Stack<TreeNode<T>> children) {
            this.children = children;//设置节点的子节点栈
        }
    
        static class Tree<T> {
            private TreeNode<T> root;
    
            public Tree(TreeNode<T> root) {
                this.root = root;
            }
    
            public TreeNode<T> deepCopy() {
                return deepCopyHelper(root);
            }
    
            private TreeNode<T> deepCopyHelper(TreeNode<T> node) {
                if (node == null) {
                    return null;
                }
    
                TreeNode<T> newNode = new TreeNode<>(node.getData());
                for (TreeNode<T> child : node.getChildren()) {
                    newNode.getChildren().push(deepCopyHelper(child));
                }
    
                return newNode;
            }
        }
    
        public static void main(String[] args) {
            TreeNode<String> nodeB = new TreeNode<>("B");
            TreeNode<String> nodeC = new TreeNode<>("C");
    
            Tree<String> treeC = new Tree<>(nodeC);
    
            nodeB.insert(nodeB, treeC);
    
            for (TreeNode<String> child : nodeB.getChildren()) {
                System.out.println(child.getData());  // 输出“C”
            }
        }
    }
    
    
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 1月2日
  • 赞助了问题酬金15元 12月25日
  • 创建了问题 12月25日