面试题08 - 二叉树的深度 【树】
题目:输入一棵二叉树的根结点,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
例如:输入二叉树:
10
/ \
6 14
/ / \
4 12 16
输出该树的深度3。
#include <iostream> // 递归,深搜。你一定要理解它! dfs : 能进则进,进不了则换,换不了则退! #include <string> #include <cstring> #include <cstdlib> #include <cstdio> #include <cmath> #include <vector> #include <stack> #include <deque> #include <queue> #include <bitset> #include <list> #include <map> #include <set> #include <iterator> #include <algorithm> #include <functional> #include <utility> #include <sstream> #include <climits> #include <cassert> #define BUG puts("here!!!"); using namespace std; struct Node { public : int value; Node* lchild; Node* rchild; }; Node* creat() { int x; cin >> x; if(x == -1) return NULL; Node* root = new Node(); root->value = x; root->lchild = creat(); root->rchild = creat(); return root; } int treeDep(Node* root) { if(root == NULL) return 0; int nLeft = treeDep(root->lchild); int nRight = treeDep(root->rchild); return (nLeft > nRight ? nLeft : nRight) + 1; } int main() { Node* root = creat(); cout << treeDep(root) << endl; return 0; }