c++中树的拷贝构造函数的迭代实现

本文介绍了一种使用先序遍历实现二叉树深拷贝的方法,通过栈保存节点位置并按顺序拷贝,确保了每个节点及其子节点都能被正确复制。

具体思想是通过遍历目标树,保存对应的左右孩子节点位置。以按顺序拷贝对应位置的内容。

这里用先序遍历的原因是为了当要取等待拷贝的节点的左右孩子的位置,可以保证此节点存在。避免访问NULL使程序跳出。

 

 

  1. template<typename T>
  2. inline BinTree<T>::BinTree(BinTree & binTree)
  3. {
  4.     BinNodePosi(T) otherTreeNode;
  5.     stack<BinNodePosi(T)>otherBinNodeStack;

  6.     BinNode<T>** selfTreeNode;
  7.     stack<BinNode<T>**>selfBinNodeStack;
  8.     selfBinNodeStack.push(&_root);
  9.     otherBinNodeStack.push(binTree._root);

  10.     while (!otherBinNodeStack.empty())
  11.     {
  12.         selfTreeNode = selfBinNodeStack.top(); selfBinNodeStack.pop();
  13.         otherTreeNode = otherBinNodeStack.top(); otherBinNodeStack.pop();
  14.         *selfTreeNode = new BinNode<T>(otherTreeNode->data, otherTreeNode->parent);
  15.         if (otherTreeNode->rc)
  16.         {
  17.             otherBinNodeStack.push(otherTreeNode->rc);
  18.             selfBinNodeStack.push(&((*selfTreeNode)->rc));
  19.         }
  20.         if (otherTreeNode->lc)
  21.         {
  22.             otherBinNodeStack.push(otherTreeNode->lc);
  23.             selfBinNodeStack.push(&((*selfTreeNode)->lc));
  24.         }
  25.     }
  26. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值