中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++ 二叉樹的鏡像實例詳解

發布時間:2020-09-01 13:02:12 來源:腳本之家 閱讀:117 作者:lqh 欄目:編程語言

二叉樹的鏡像:將一個二叉樹的左右子樹,調換位置。即下圖的形式:

C++ 二叉樹的鏡像實例詳解

遞歸的思想是:

從根節點的左右子樹進行交換,然后以根節點的左子樹為根節點,而后以根節點的右結點為根節點,進行左右子樹交換。遇到空節點或葉節點直接返回。下面求二叉樹鏡像的函數代碼實現:

template<class T> 
void MirroTree(TreeNode<T> * root) 
{ 
  if (root == NULL) 
    return; 
  if (root->_left == NULL && root->_right == NULL) 
    return; 
  else 
  { 
    TreeNode<T>* temp = root->_left; 
    root->_left = root->_right; 
    root->_right = temp; 
  } 
  MirroTree(root->_left); 
  MirroTree(root->_right); 
} 

非遞歸實現思想:

利用stack棧的FILO,即先進后出原則,將根節點先行壓入棧中,然后進入棧同時取棧頂結點并pop棧,然后交換左右子樹的結點,若根節點的左右子樹不為空,即壓入棧中,直到棧為空則停止。

下面是非遞歸實現代碼:

template<class T> 
void MirroTree_NoR(TreeNode<T>* root) 
{ 
  stack<TreeNode<T>*> s; 
  s.push(root); 
  while (s.size()) 
  { 
    TreeNode<T>* Top = s.top(); 
    if (Top->_left != NULL || Top->_right != NULL) 
    { 
      TreeNode<T>* temp = Top->_left; 
      Top->_left = Top->_right; 
      Top->_right = temp; 
    } 
    if (Top->_left != NULL) 
      s.push(Top->_left); 
    if (Top->_right != NULL) 
      s.push(Top->_right); 
  } 
} 

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

马山县| 合山市| 原平市| 康马县| 霍州市| 隆化县| 靖州| 彩票| 依安县| 普兰店市| 新乡县| 南陵县| 宿州市| 固安县| 黄大仙区| 镶黄旗| 滁州市| 闻喜县| 阿合奇县| 和田县| 莆田市| 武义县| 宁陕县| 屏东市| 盱眙县| 北海市| 枝江市| 东源县| 普宁市| 开江县| 临武县| 岱山县| 乌拉特后旗| 花垣县| 通辽市| 集安市| 中超| 许昌县| 青岛市| 屯留县| 荔浦县|