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