从 Preorder 计算完整二叉树的深度
给定二叉树的前序,计算其深度(或高度)[从深度 0 开始]。预购以具有两个可能字符的字符串形式给出。
- 'l' 表示叶子
- 'n' 表示内部节点
给定的树可以看作是一个完整的二叉树,其中每个节点都有 0 个或两个子节点。一个节点的两个子节点可以是“n”或“l”或两者的混合。
例子 :
Input : nlnll
Output : 2
Explanation :
Input : nlnnlll
Output : 3
给定二叉树的前序所以遍历
此外,我们会得到一个 char字符串(由 'n' 和 'l' 组成),因此也不需要实现树。
递归函数将是:
1)基本情况:返回0;当 tree[i] = 'l' 或 i >= strlen(tree)
2) find_depth( tree[i++] ) //左子树
3) find_depth( tree[i++] ) //右子树
其中 i 是字符串树的索引。
C++
// C++ program to find height of full binary tree
// using preorder
#include
using namespace std;
// function to return max of left subtree height
// or right subtree height
int findDepthRec(char tree[], int n, int& index)
{
if (index >= n || tree[index] == 'l')
return 0;
// calc height of left subtree (In preorder
// left subtree is processed before right)
index++;
int left = findDepthRec(tree, n, index);
// calc height of right subtree
index++;
int right = findDepthRec(tree, n, index);
return max(left, right) + 1;
}
// Wrapper over findDepthRec()
int findDepth(char tree[], int n)
{
int index = 0;
findDepthRec(tree, n, index);
}
// Driver program
int main()
{
// Your C++ Code
char tree[] = "nlnnlll";
int n = strlen(tree);
cout << findDepth(tree, n) << endl;
return 0;
}
Java
// Java program to find height
// of full binary tree using
// preorder
import java .io.*;
class GFG
{
// function to return max
// of left subtree height
// or right subtree height
static int findDepthRec(String tree,
int n, int index)
{
if (index >= n ||
tree.charAt(index) == 'l')
return 0;
// calc height of left subtree
// (In preorder left subtree
// is processed before right)
index++;
int left = findDepthRec(tree,
n, index);
// calc height of
// right subtree
index++;
int right = findDepthRec(tree, n, index);
return Math.max(left, right) + 1;
}
// Wrapper over findDepthRec()
static int findDepth(String tree,
int n)
{
int index = 0;
return (findDepthRec(tree,
n, index));
}
// Driver Code
static public void main(String[] args)
{
String tree = "nlnnlll";
int n = tree.length();
System.out.println(findDepth(tree, n));
}
}
// This code is contributed
// by anuj_67.
Python3
#Python program to find height of full binary tree
# using preorder
# function to return max of left subtree height
# or right subtree height
def findDepthRec(tree, n, index) :
if (index[0] >= n or tree[index[0]] == 'l'):
return 0
# calc height of left subtree (In preorder
# left subtree is processed before right)
index[0] += 1
left = findDepthRec(tree, n, index)
# calc height of right subtree
index[0] += 1
right = findDepthRec(tree, n, index)
return (max(left, right) + 1)
# Wrapper over findDepthRec()
def findDepth(tree, n) :
index = [0]
return findDepthRec(tree, n, index)
# Driver program to test above functions
if __name__ == '__main__':
tree= "nlnnlll"
n = len(tree)
print(findDepth(tree, n))
# This code is contributed by SHUBHAMSINGH10
C#
// C# program to find height of
// full binary tree using preorder
using System;
class GFG {
// function to return max of left subtree
// height or right subtree height
static int findDepthRec(char[] tree, int n, int index)
{
if (index >= n || tree[index] == 'l')
return 0;
// calc height of left subtree (In preorder
// left subtree is processed before right)
index++;
int left = findDepthRec(tree, n, index);
// calc height of right subtree
index++;
int right = findDepthRec(tree, n, index);
return Math.Max(left, right) + 1;
}
// Wrapper over findDepthRec()
static int findDepth(char[] tree, int n)
{
int index = 0;
return (findDepthRec(tree, n, index));
}
// Driver program
static public void Main()
{
char[] tree = "nlnnlll".ToCharArray();
int n = tree.Length;
Console.WriteLine(findDepth(tree, n));
}
}
// This code is contributed by vt_m.
Javascript
输出:
3
时间复杂度: O(N)
辅助空间: O(1)