Skip to main content

Check for foldable binary tree in php

Php program for Check for foldable binary tree. Here problem description and explanation.

<?php
/* 
  Php program for
  Check if binary tree is foldable binary tree
  Using recursion
*/
// Binary Tree Node
class TreeNode
{
	public $data;
	public $left;
	public $right;
	public	function __construct($data)
	{
		// Set node value
		$this->data = $data;
		$this->left = NULL;
		$this->right = NULL;
	}
}
class BinaryTree
{
	public $root;
	public	function __construct()
	{
		$this->root = NULL;
	}
	public	function isFoldable($leftRoot, 
                                 $rightRoot)
	{
		if ($leftRoot == NULL && $rightRoot == NULL)
		{
			// When both node empty
			return true;
		}
		else if ($leftRoot != NULL && $rightRoot != NULL && 
                 $this->isFoldable($leftRoot->left, $rightRoot->right) && 
                 $this->isFoldable($leftRoot->right, $rightRoot->left))
		{
			// When
			// Valid the properties of foldable tree
			return true;
		}
		// Fail case
		return false;
	}
	// Display tree element inorder form
	public	function inorder($node)
	{
		if ($node != NULL)
		{
			// Visit to left subtree
			$this->inorder($node->left);
			// Print node value
			echo "  $node->data";
			// Visit to right subtree
			$this->inorder($node->right);
		}
	}
	public static function main()
	{
		// Create new tree
		$tree = new BinaryTree();
		/*
		   Binary Tree
		  -----------------------
		       5
		     /   \
		    7     4
		   /       \
		  1         2
		   \       /
		    2     5
		*/
		// Binary tree nodes
		$tree->root = new TreeNode(5);
		$tree->root->left = new TreeNode(7);
		$tree->root->right = new TreeNode(4);
		$tree->root->left->left = new TreeNode(1);
		$tree->root->right->right = new TreeNode(2);
		$tree->root->right->right->left = new TreeNode(5);
		$tree->root->left->left->right = new TreeNode(2);
		// Display Tree elements
		$tree->inorder($tree->root);
		$result = $tree->isFoldable($tree->root->left, 
                                    $tree->root->right);
		if ($result == true)
		{
			echo "\n Foldable Tree\n";
		}
		else
		{
			echo "\n Not Foldable Tree\n";
		}
		/*
		         5
		       /   \
		      7     4
		     /       \
		    1         2
		     \       /
		      2     5
		       \
		        3  
		*/
		// Case 2
		$tree->root->left->left->right->right = new TreeNode(3);
		$tree->inorder($tree->root);
		$result = $tree->isFoldable($tree->root->left, 
                                    $tree->root->right);
		if ($result == true)
		{
			echo "\n Foldable Tree\n";
		}
		else
		{
			echo "\n Not Foldable Tree\n";
		}
	}
}
BinaryTree::main();

Output

  1  2  7  5  4  5  2
 Foldable Tree
  1  2  3  7  5  4  5  2
 Not Foldable Tree




Comment

Please share your knowledge to improve code and content standard. Also submit your doubts, and test case. We improve by your feedback. We will try to resolve your query as soon as possible.

New Comment