スタックを使用してツリーの深いコピーを実現

5074 ワード

コードは次のとおりです.
//    ,     。
    public BinaryTree(BinaryTree<T> p){

        this(); //      
        LinkedStack<BinaryNode<T>> stack = new LinkedStack<BinaryNode<T>>();
        LinkedStack<BinaryNode<T>> stack1 = new LinkedStack<BinaryNode<T>>();
        BinaryNode<T> p1 = p.root;
        BinaryNode<T> p2 = this.root;
        if(p1.left==null&&p1.right==null)
            p2.data = p1.data;
        else {
            while(p1!=null||!stack.isEmpty()) {
                if(p1!=null) {
                    p2.data = p1.data;
                    //    
                    stack1.push(p2);
                    stack.push(p1);
                    p1 = p1.left;
                    //p1     ,      
                    if (p1 != null) {
                        BinaryNode<T> p3 = new BinaryNode<T>();
                        //p2        
                        p2.left = p3;
                        //p2     
                        p2 = p2.left;
                    }
                }else {
                    //    
                    p1 = stack.pop();
                    //     
                    p1 = p1.right;
                    p2 = stack1.pop();
                    //p1     ,      
                    if(p1!=null){
                        BinaryNode<T> p3 = new BinaryNode<T>();
                        p2.right = p3;
                        p2 = p2.right;
                    }
                }
            }
        }
    }

他のコードはgithubに置いてあります
クリックしてください