# Check whether a given binary tree is skewed binary tree or not?

Given a Binary Tree check whether it is skewed binary tree or not. A skewed tree is a tree where each node has only one child node or none.

Examples:

```Input :         5
/
4
\
3
/
2
Output : Yes

Input :       5
/
4
\
3
/  \
2    4
Output : No
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

The idea is to check if a node has two children. If node has two children return false, else recursively compute whether subtree with one child is skewed tree. If node is leaf node return true.

Below is the implementation of above approach:

## C++

 `// C++ program to Check whether a given  ` `// binary tree is skewed binary tree or not? ` ` `  `#include ` `using` `namespace` `std; ` ` `  `// A Tree node ` `struct` `Node { ` `    ``int` `key; ` `    ``struct` `Node *left, *right; ` `}; ` ` `  `// Utility function to create a new node ` `Node* newNode(``int` `key) ` `{ ` `    ``Node* temp = ``new` `Node; ` `    ``temp->key = key; ` `    ``temp->left = temp->right = NULL; ` `    ``return` `(temp); ` `} ` ` `  `bool` `isSkewedBT(Node* root) ` `{ ` `    ``// check if node is NULL or is a leaf node ` `    ``if` `(root == NULL || (root->left == NULL &&  ` `                        ``root->right == NULL)) ` `        ``return` `true``; ` ` `  `    ``// check if node has two children if ` `    ``// yes, return false ` `    ``if` `(root->left && root->right)  ` `        ``return` `false``; ` `    ``if` `(root->left) ` `        ``return` `isSkewedBT(root->left); ` `    ``return` `isSkewedBT(root->right); ` `} ` ` `  `// Driver program ` `int` `main() ` `{ ` `    ``/*   10 ` `       ``/     \ ` `     ``12       13 ` `           ``/     \ ` `         ``14       15     ` `        ``/   \     /  \ ` `       ``21   22   23   24            ` `    ``Let us create Binary Tree shown in above example */` `    ``Node* root = newNode(10); ` `    ``root->left = newNode(12); ` `    ``root->left->right = newNode(15); ` `    ``cout << isSkewedBT(root) << endl; ` ` `  `    ``root = newNode(5); ` `    ``root->right = newNode(4); ` `    ``root->right->left = newNode(3); ` `    ``root->right->left->right = newNode(2); ` `    ``cout << isSkewedBT(root) << endl; ` ` `  `    ``root = newNode(5); ` `    ``root->left = newNode(4); ` `    ``root->left->right = newNode(3); ` `    ``root->left->right->left = newNode(2); ` `    ``root->left->right->right = newNode(4); ` `    ``cout << isSkewedBT(root) << endl; ` `} `

## Java

 `// Java program to Check whether a given  ` `// binary tree is skewed binary tree or not? ` ` `  `class` `Solution ` `{ ` `// A Tree node  ` ` ``static` `class` `Node {  ` `    ``int` `key;  ` `     ``Node left, right;  ` `} ` ` `  `// Utility function to create a new node  ` `static` `Node newNode(``int` `key)  ` `{  ` `    ``Node temp = ``new` `Node();  ` `    ``temp.key = key;  ` `    ``temp.left = temp.right = ``null``;  ` `    ``return` `(temp);  ` `}  ` ` `  `static` `boolean` `isSkewedBT(Node root)  ` `{  ` `    ``// check if node is null or is a leaf node  ` `    ``if` `(root == ``null` `|| (root.left == ``null` `&&  ` `                        ``root.right == ``null``))  ` `        ``return` `true``;  ` ` `  `    ``// check if node has two children if  ` `    ``// yes, return false  ` `    ``if` `(root.left!=``null` `&& root.right!=``null``)  ` `        ``return` `false``;  ` `    ``if` `(root.left!=``null``)  ` `        ``return` `isSkewedBT(root.left);  ` `    ``return` `isSkewedBT(root.right);  ` `}  ` ` `  `// Driver program  ` `public` `static` `void` `main(String args[]) ` `{  ` `    ``/* 10  ` `    ``/     \  ` `    ``12     13  ` `        ``/     \  ` `        ``14     15      ` `        ``/ \     / \  ` `    ``21 22 23 24          ` `    ``Let us create Binary Tree shown in above example */` `    ``Node root = newNode(``10``);  ` `    ``root.left = newNode(``12``);  ` `    ``root.left.right = newNode(``15``);  ` `    ``System.out.println( isSkewedBT(root)?``1``:``0` `);  ` ` `  `    ``root = newNode(``5``);  ` `    ``root.right = newNode(``4``);  ` `    ``root.right.left = newNode(``3``);  ` `    ``root.right.left.right = newNode(``2``);  ` `    ``System.out.println( isSkewedBT(root)?``1``:``0` `);  ` ` `  `    ``root = newNode(``5``);  ` `    ``root.left = newNode(``4``);  ` `    ``root.left.right = newNode(``3``);  ` `    ``root.left.right.left = newNode(``2``);  ` `    ``root.left.right.right = newNode(``4``);  ` `    ``System.out.println(  isSkewedBT(root)?``1``:``0` `);  ` `}  ` `} ` `//contributed by Arnab Kundu `

## Python3

 `# Python3 program to Check whether a given  ` `# binary tree is skewed binary tree or not?  ` ` `  `# Binary Tree Node  ` `""" utility that allocates a newNode  ` `with the given key """` `class` `newNode:  ` ` `  `    ``# Construct to create a newNode  ` `    ``def` `__init__(``self``, key):  ` `        ``self``.data ``=` `key ` `        ``self``.left ``=` `None` `        ``self``.right ``=` `None` ` `  `def` `isSkewedBT(root):  ` ` `  `    ``# check if node is None or is a leaf node  ` `    ``if` `(root ``=``=` `None` `or` `(root.left ``=``=` `None` `and` `                         ``root.right ``=``=` `None``)):  ` `        ``return` `1` ` `  `    ``# check if node has two children if  ` `    ``# yes, return false  ` `    ``if` `(root.left ``and` `root.right):  ` `        ``return` `0` `    ``if` `(root.left) : ` `        ``return` `isSkewedBT(root.left)  ` `    ``return` `isSkewedBT(root.right)  ` ` `  `# Driver Code  ` `if` `__name__ ``=``=` `'__main__'``: ` ` `  `    ``""" 10  ` `    ``/     \  ` `    ``12     13  ` `        ``/     \  ` `        ``14     15      ` `        ``/ \     / \  ` `    ``21 22 23 24          ` `    ``Let us create Binary Tree shown in above example """` `    ``root ``=` `newNode(``10``)  ` `    ``root.left ``=` `newNode(``12``)  ` `    ``root.left.right ``=` `newNode(``15``)  ` `    ``print``(isSkewedBT(root)) ` ` `  `    ``root ``=` `newNode(``5``)  ` `    ``root.right ``=` `newNode(``4``)  ` `    ``root.right.left ``=` `newNode(``3``)  ` `    ``root.right.left.right ``=` `newNode(``2``)  ` `    ``print``(isSkewedBT(root)) ` ` `  `    ``root ``=` `newNode(``5``)  ` `    ``root.left ``=` `newNode(``4``)  ` `    ``root.left.right ``=` `newNode(``3``)  ` `    ``root.left.right.left ``=` `newNode(``2``)  ` `    ``root.left.right.right ``=` `newNode(``4``)  ` `    ``print``(isSkewedBT(root)) ` ` `  `# This code is contributed by ` `# Shubham Singh(SHUBHAMSINGH10) `

## C#

 `// C# program to Check whether a given  ` `// binary tree is skewed binary tree or not?  ` `using` `System; ` ` `  `public` `class` `GFG  ` `{  ` `     `  `// A Tree node  ` `class` `Node  ` `{  ` `    ``public` `int` `key;  ` `    ``public` `Node left, right;  ` `}  ` ` `  `// Utility function to create a new node  ` `static` `Node newNode(``int` `key)  ` `{  ` `    ``Node temp = ``new` `Node();  ` `    ``temp.key = key;  ` `    ``temp.left = temp.right = ``null``;  ` `    ``return` `(temp);  ` `}  ` ` `  `static` `bool` `isSkewedBT(Node root)  ` `{  ` `    ``// check if node is null or is a leaf node  ` `    ``if` `(root == ``null` `|| (root.left == ``null` `&&  ` `                        ``root.right == ``null``))  ` `        ``return` `true``;  ` ` `  `    ``// check if node has two children if  ` `    ``// yes, return false  ` `    ``if` `(root.left!=``null` `&& root.right!=``null``)  ` `        ``return` `false``;  ` `    ``if` `(root.left!=``null``)  ` `        ``return` `isSkewedBT(root.left);  ` `    ``return` `isSkewedBT(root.right);  ` `}  ` ` `  `// Driver code  ` `public` `static` `void` `Main()  ` `{  ` `    ``/* 10  ` `    ``/ \  ` `    ``12 13  ` `        ``/ \  ` `        ``14 15  ` `        ``/ \ / \  ` `    ``21 22 23 24  ` `    ``Let us create Binary Tree shown in above example */` `    ``Node root = newNode(10);  ` `    ``root.left = newNode(12);  ` `    ``root.left.right = newNode(15);  ` `    ``Console.WriteLine( isSkewedBT(root)?1:0 );  ` ` `  `    ``root = newNode(5);  ` `    ``root.right = newNode(4);  ` `    ``root.right.left = newNode(3);  ` `    ``root.right.left.right = newNode(2);  ` `    ``Console.WriteLine( isSkewedBT(root)?1:0 );  ` ` `  `    ``root = newNode(5);  ` `    ``root.left = newNode(4);  ` `    ``root.left.right = newNode(3);  ` `    ``root.left.right.left = newNode(2);  ` `    ``root.left.right.right = newNode(4);  ` `    ``Console.WriteLine( isSkewedBT(root)?1:0 );  ` `}  ` `}  ` ` `  `/* This code is contributed by Rajput-Ji*/`

Output:

```1
1
0
```

Time complexity of this solution is
Best case : O(1) when root has two children.
Worst case : O(h) when tree is skewed tree.

Don’t stop now and take your learning to the next level. Learn all the important concepts of Data Structures and Algorithms with the help of the most trusted course: DSA Self Paced. Become industry ready at a student-friendly price.

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Article Tags :
Practice Tags :

1

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.