给定一个完整的深度为H的二叉树。如果从该树的左侧和右侧拍摄了镜像,则:
Right Mirrored Image: Rightmost node of the every level is connected to mirrored corresponding node.
Left Mirrored Image: Left most node of the every level is connected to mirrored corresponding node.
任务是在拍摄最后一棵树中的两个镜像后找到边缘的数量。
例子:
Input: H = 1
Output: 10
2 edges in the original tree will get mirrored in the mirror images (left and right) i.e. 6 edges in total.
And the edges connecting the mirror images with the original tree as shown in the image above.
Input: H = 2
Output: 24
(6 * 3) + 3 + 3 = 24
方法:在每个镜像之后,维护最左边,最右边的节点。每次镜像操作后,边缘数量都会改变。原来,
右镜像后:
左镜像后:
在完整的修改树中:
下面是上述方法的实现:
C++
// C++ implementation of the approach
#include
using namespace std;
// Function to return the total number
// of edges in the modified tree
int countEdges(int H)
{
int edges, right, left;
edges = 2 * (pow(2, H) - 1);
left = right = H + 1;
// Total edges in the modified tree
int cnt = (edges * 3) + left + right;
return cnt;
}
// Driver code
int main()
{
int H = 1;
cout << countEdges(H);
return 0;
}
Java
// Java implementation of the approach
import java.io.*;
class GFG {
// Function to return the total number
// of edges in the modified tree
static int countEdges(int H)
{
int edges, right, left;
edges = 2 * (int)(Math.pow(2, H) - 1);
left = right = H + 1;
// Total edges in the modified tree
int cnt = (edges * 3) + left + right;
return cnt;
}
// Driver code
public static void main(String[] args)
{
int H = 1;
System.out.println(countEdges(H));
}
}
// This code has been contributed by anuj_67..
Python 3
# Python 3 implementation of the approach
# Function to return the total number
# of edges in the modified tree
def countEdges( H):
edges = 2 * (pow(2, H) - 1)
left = right = H + 1
# Total edges in the modified tree
cnt = (edges * 3) + left + right
return cnt
# Driver code
if __name__ == "__main__":
H = 1;
print(countEdges(H))
# This code is contributed by ChitraNayal
C#
// C# implementation of the approach
using System;
class GFG
{
// Function to return the total number
// of edges in the modified tree
static int countEdges(int H)
{
int edges, right, left;
edges = 2 * (int)(Math.Pow(2, H) - 1);
left = right = H + 1;
// Total edges in the modified tree
int cnt = (edges * 3) + left + right;
return cnt;
}
// Driver code
public static void Main()
{
int H = 1;
Console.WriteLine(countEdges(H));
}
}
// This code is contributed by AnkitRai01
输出:
10