面試題27:二叉樹的映象。輸入一棵二叉樹,該函式輸出它的映象。二叉樹的節點定義如下:
struct binarytreenode
;
依次交換每個節點的兩個子樹即可:
#include
using
namespace std;
struct binarytreenode
;binarytreenode*
constructcore
(int
* startpreorder,
int* endpreorder,
int* startinorder,
int* endinorder)
else
}int
* rootinorder = startinorder;
while
(rootinorder < endinorder &&
*rootinorder !=
*startpreorder)
if(rootinorder == endinorder &&
*rootinorder !=
*startpreorder)
int leftlength = rootinorder - startinorder;
// 左子樹長度
int* leftpreorderend = startpreorder + leftlength;
// 左子樹尾邊界
if(leftlength >0)
if(leftlength < endpreorder - startpreorder)
return root;
}binarytreenode*
construct
(int
* preorder,
int* inorder,
int length)
return
constructcore
(preorder, preorder + length -
1, inorder, inorder + length -1)
;}void
mirrorrecursively
(binarytreenode *proot)
binarytreenode* temp = proot-
>m_pleft;
proot-
>m_pleft = proot-
>m_pright;
proot-
>m_pright = temp;
mirrorrecursively
(proot-
>m_pleft)
;mirrorrecursively
(proot-
>m_pright);}
void
preorderprint
(binarytreenode* root)
cout << root-
>m_nvalue << endl;
preorderprint
(root-
>m_pleft)
;preorderprint
(root-
>m_pright)
;return;}
intmain()
;int inorder=
; binarytreenode* proot =
construct
(preorder, inorder,6)
;// 只能建立沒有重複資料的樹
mirrorrecursively
(proot)
;preorderprint
(proot)
;}
劍指offer 學習筆記 二叉樹的深度
面試題55 二叉樹的深度。1.輸入一棵二叉樹,求該樹的深度。只需遍歷整棵樹的每一條路徑找出最長的即可,以下 中的樹結構為 左子樹長度 int leftpreorderend startpreorder leftlength 左子樹先序遍歷尾邊界 if leftlength 0 if leftleng...
劍指offer 二叉樹 二叉樹搜尋樹
package bst import j a.util.public class bst if pre.length 0 in.length 0 treenode root new treenode pre 0 for int i 0 i in.length i return root 判斷給定陣列...
劍指offer 二叉樹 二叉樹的映象
操作給定的二叉樹,將其變換為源二叉樹的映象。二叉樹的映象定義 源二叉樹 8 6 10 5 7 9 11 映象二叉樹 8 10 6 11 9 7 51,交換左右子樹 2,遞迴交換左右子樹的左右子節點 package offertest title mirror description author 田...