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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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. }

以上是关于c++中树的拷贝构造函数的迭代实现的主要内容,如果未能解决你的问题,请参考以下文章

C++——list的模拟实现

关于C++默认拷贝构造函数

C++入门之vector的模拟实现

C++ string类的模拟实现

C++ string类的模拟实现

c++模拟实现string类