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

来源:互联网 发布:centos 防止arp 编辑:程序博客网 时间:2024/06/15 06:39

代码如下

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

请点击

原创粉丝点击