使用栈实现二叉树的深拷贝

代码如下

//拷贝构造,非递归实现。
    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上

请点击

你可能感兴趣的:(数据结构)