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

Last Updated : 08 Sep, 2022

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```

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*/`

## Javascript

 ``

Output

```1
1
0```

Complexity Analysis:

• Time complexity:
• Best case : O(1) when root has two children.
• Worst case : O(h) when tree is skewed tree.
• Auxiliary Space: O(h)
• Here h is the height of the tree

Another approach:(iterative method)

We can also check if a tree is skewed or not by iterative method using above approach.

Implementation:

## C++

 `// C++ program to Check whether a given` `// binary tree is skewed binary tree or not using iterative` `// method`   `#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)` `{`   `    ``while` `(root != NULL) {` `        ``// check if the node is a leaf node` `        ``if` `(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``;` `        ``// move towards left if it has a left child` `        ``if` `(root->left != NULL)` `            ``root = root->left;` `        ``// or move towards right if it has a right child` `        ``else` `            ``root = root->right;` `    ``}` `    ``return` `true``;` `}`   `// 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;` `}`   `// This code is contributed by Abhijeet Kumar(abhijeet19403)`

## Java

 `// Java program to Check whether a given` `// binary tree is skewed binary tree or not using iterative method`   `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)` `    ``{` `        ``while` `(root != ``null``) {` `            ``// check if the node is a leaf node` `            ``if` `(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``;` `              ``// move towards left if it has a left child ` `            ``if` `(root.left != ``null``)` `                ``root = root.left;` `              ``// or move towards right if it has a right child` `            ``else` `                ``root = root.right;` `        ``}` `        ``return` `true``;` `    ``}`   `    ``// 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``);` `    ``}` `}` `// This code is contributed by Abhijeet Kumar(abhijeet19403)`

## Python3

 `# Python3 program to Check whether a given` `# binary tree is skewed binary tree or not using iterative method`   `# 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):`   `    ``while` `(root !``=` `None``):` `            ``# check if the node is a leaf node` `            ``if` `(root.left ``=``=` `None` `and` `root.right ``=``=` `None``):` `                ``return` `1` `            ``# check if node has two children if` `            ``# yes, return false` `            ``if` `(root.left !``=` `None` `and` `root.right !``=` `None``):` `                ``return` `0` `              ``# move towards left if it has a left child` `            ``if` `(root.left !``=` `None``):` `                ``root ``=` `root.left` `              ``# or move towards right if it has a right child` `            ``else``:` `                ``root ``=` `root.right`   `    ``return` `1`   `# 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` `# Abhijeet Kumar(abhijeet19403)`

## C#

 `// C# program to Check whether a given` `// binary tree is skewed binary tree or not using iterative method` `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)` `    ``{` `        ``while` `(root != ``null``) {` `            ``// check if the node is a leaf node` `            ``if` `(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``;` `            ``// move towards left if it has a left child` `            ``if` `(root.left != ``null``)` `                ``root = root.left;` `            ``// or move towards right if it has a right child` `            ``else` `                ``root = root.right;` `        ``}` `        ``return` `true``;` `    ``}`   `    ``// 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 Abhijeet` ` ``* Kumar(abhijeet19403)*/`

## Javascript

 ``

Output

```1
1
0```

Complexity Analysis:

• Time Complexity: O(n)
• As in the worst case we have to visit every node.
• Auxiliary Space: O(1)
• As constant extra space is used.

This approach was contributed by Ahijeet Kumar.

Previous
Next