《劍指Offer》面試題 二叉樹的深度

2021-07-05 19:27:47 字數 1163 閱讀 9673

題目描述:

輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點(含根、葉結點)形成樹的一條路徑,最長路徑的長度為樹的深度。

思路

此題的遞迴思想比較簡單,直接用遞迴將根節點的深度轉換為求左右子孩子的深度的較大值+1,根節點的深度等於max(左孩子的深度,右孩子的深度)。

/*

輸入:第一行輸入有n,n表示結點數,結點號從1到n。根結點為1。 n <= 10。

接下來有n行,每行有兩個個整型a和b,表示第i個節點的左右孩子孩子。a為左孩子,b為右孩子。當a為-1時,沒有左孩子。當b為-1時,沒有右孩子。

輸出:輸出乙個整型,表示樹的深度。

樣例輸入:

32 3

-1 -1

-1 -1

樣例輸出:2*/

/*思路: 用遞迴,根節點的深度等於max(左孩子的深度,右孩子的深度)。

*///此題用陣列儲存樹節點

#include

#include

struct treenode;

//遞迴實現

int depthinbtree(treenode* proot,int index)

int leftdepth=depthinbtree(proot,proot[index].pleftchild);

int rightdepth=depthinbtree(proot,proot[index].prightchild);

return (leftdepth>rightdepth?leftdepth:rightdepth)+1;

}int main(void)

for(int i=0;iint leftindex;

int rightindex;

scanf("%d%d",&leftindex,&rightindex);

if(leftindex!=-1)

else

if(rightindex!=-1)

else

}int depth=depthinbtree(proot,0);

printf("%d\n",depth);

}return

0;}

執行結果如下:

《劍指Offer》面試題 平衡二叉樹

題目 輸入乙個二叉樹的根節點,判斷該樹是不是平衡二叉樹。如果某二叉樹中任意節點的左右子樹的深度相差不超過1,那麼它就是一棵平衡二叉樹。思路 用後序遍歷實現 先遍歷節點的左右子樹,左右子樹都平衡才來判斷該節點是否平衡,如果左右子樹中有不平衡的,則直接返回false,避免了從上往下逐個節點地計算深度帶來...

劍指Offer 面試題 樹和二叉樹

題目描述 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。基礎知識 在二叉樹的前序遍歷序列中,第乙個數字總是樹的根節點的值。在中序遍歷序列中,根節點的值在序列的中間,左子樹的節點的...

劍指Offer 面試題19 映象二叉樹

操作給定的二叉樹,將其變換為源二叉樹的映象。以題目中的兩棵樹為例 就是先序遍歷這棵樹,如果當前正在遍歷的節點有子結點 無論是左還是右 就交換兩個子節點,當交換完所有的非葉子結點的左右子結點的時候,就得到了樹的映象.具體過程如下所示 注意6和10交換之後,第三層結點的排列順序 遞迴實現 public ...