資料結構 筆記:二叉樹的比較與相加
阿新 • • 發佈:2018-11-29
二叉樹的克隆操作
-SharedPointer<BTree<T>> clone() const
·克隆當前樹的一份拷貝
·返回值為堆空間中的一棵新二叉樹(與當前樹相等)
二叉樹的克隆
-定義功能:clone(node)
·拷貝node為根節點的二叉樹(資料元素在對應位置相等)
BTreeNode<T>* clone(BTreeNode<T>* node) const { BTreeNode<T>* ret = NULL; if(node != NULL) { ret = BTreeNode<T>::NewNode(); if(ret != NULL) { ret->value = node->value; ret->left = clone(node->left); ret->right = clone(node->right); if(ret->left != NULL) { ret->left->parent = ret; } if(ret->right != NULL) { ret->right->parent = ret; } } else { //丟擲異常 } } return ret; }
二叉樹比較操作的定義
-判斷兩顆二叉樹中的資料元素是否對應相等
·bool operator == (const BTree<T>& btree)
·bool operator != (const BTree<T>& btree)
二叉樹的比較
-定義功能:equal(lh,rh)
·判斷lh為根節點的二叉樹與rh為根節點的二叉樹是否相等
二叉樹的相加操作
SharedPointer<BTree<T>> add(const BTree<T>& btree) const
·將當前二叉樹與引數btree中的資料元素在對應位置處相加
·返回值(相加的結果)為堆空間中的一棵新二叉樹
二叉樹的加法
-定義功能:add(lh,rh)
·將lh為根節點的二叉樹與rh為根結點的二叉樹相加
BTreeNode<T>* add(BTreeNode<T>* lh,BTreeNode<T>* rh)const { BTreeNode<T>* ret = NULL; if((lh == NULL) && (rh != NULL)) { ret = clone(rh); } else if((lh != NULL) && (rh == NULL)) { ret = clone(lh); } else if((lh != NULL) && (rh != NULL)) { ret = BTreeNode<T>::NewNode(); if(ret != NULL) { ret->value = lh->value + rh->value; ret->left = add(lh->left,rh->left); ret->right = add(lh->right,rh->right); if(ret->left != NULL) { ret->left->parent = ret; } if(ret->right != NULL) { ret->right->parent = ret; } } else { //丟擲異常 } } return ret;
總結:
-比較操作判斷兩個二叉樹中的資料元素是否對應相等
-克隆操作將當前二叉樹在堆空間中進行復制
-相加操作將兩顆二叉樹中的資料元素在對應位置處相加
-相加操作的結果儲存在堆空間的一棵二叉樹中