Replace node with depth in a binary tree

Here given code implementation process.

// C program for
// Replace node with depth in a binary tree
#include <stdio.h>
#include <stdlib.h>

// Tree Node
struct TreeNode
{
	int data;
	struct TreeNode *left;
	struct TreeNode *right;
};
// Binary Tree
struct BinaryTree
{
	struct TreeNode *root;
};
// Create new tree
struct BinaryTree *newTree()
{
	// Create a dynamic tree 
	struct BinaryTree *tree = 
      (struct BinaryTree *) malloc(sizeof(struct BinaryTree));
	if (tree != NULL)
	{
		tree->root = NULL;
	}
	else
	{
		printf("Memory Overflow to Create tree Tree\n");
	}
	//return new tree
	return tree;
}
// This is creates and returns the new binary tree node
struct TreeNode *getNode(int data)
{
	// Create dynamic node
	struct TreeNode *node = 
      (struct TreeNode *) malloc(sizeof(struct TreeNode));
	if (node != NULL)
	{
		//Set data and pointer values
		node->data = data;
		node->left = NULL;
		node->right = NULL;
	}
	else
	{
		//This is indicates, segmentation fault 
        // or memory overflow problem
		printf("Memory Overflow\n");
	}
	//return new node
	return node;
}
void preOrder(struct TreeNode *node)
{
	if (node != NULL)
	{
		// Print node value
		printf("  %d", node->data);
		// Visit left subtree
		preOrder(node->left);
		// Visit right subtree
		preOrder(node->right);
	}
}
void replaceByDepth(struct TreeNode *node, int depth)
{
	if (node != NULL)
	{
        // Change node value
		node->data = depth;
		// Visit left subtree
		replaceByDepth(node->left, depth + 1);
		// Visit right subtree
		replaceByDepth(node->right, depth + 1);
	}
}
int main(int argc, char const *argv[])
{
	struct BinaryTree *tree = newTree();
	/*
	         4                            
	       /   \    
	      12    7    
	     / \      \               
	    2   3      1
	       / \    / 
	      6   8  5
	     /       
	    9          
	-----------------
	  Constructing binary tree

	*/
	tree->root = getNode(4);
	tree->root->left = getNode(12);
	tree->root->left->right = getNode(3);
	tree->root->left->right->left = getNode(6);
	tree->root->left->right->left->left = getNode(9);
	tree->root->left->right->right = getNode(8);
	tree->root->left->left = getNode(2);
	tree->root->right = getNode(7);
	tree->root->right->right = getNode(1);
	tree->root->right->right->left = getNode(5);
	printf("\n Before replace by depth \n");
	preOrder(tree->root);
	// Update node value by depth
	replaceByDepth(tree->root, 0);
	printf("\n After replace by depth \n");
	preOrder(tree->root);
	return 0;
}

input

 Before replace by depth
  4  12  2  3  6  9  8  7  1  5
 After replace by depth
  0  1  2  2  3  4  3  1  2  3
/*
    Java Program
    Replace node with depth in a binary tree
*/
// Binary Tree node
class TreeNode
{
    public int data;
    public TreeNode left;
    public TreeNode right;
    public TreeNode(int data)
    {
        // Set node value
        this.data = data;
        this.left = null;
        this.right = null;
    }
}
public class BinaryTree
{
    public TreeNode root;
    public BinaryTree()
    {
        // Set initial tree root to null
        this.root = null;
    }
    public void preOrder(TreeNode node)
    {
        if (node != null)
        {
            // Print node value
            System.out.print("  " + node.data );
            // Visit left subtree
            preOrder(node.left);
            // Visit right subtree
            preOrder(node.right);
        }
    }
    public void replaceByDepth(TreeNode node, int depth)
    {
        if (node != null)
        {
            // Change node value
            node.data = depth;
            // Visit left subtree
            replaceByDepth(node.left, depth + 1);
            // Visit right subtree
            replaceByDepth(node.right, depth + 1);
        }
    }
 
    public static void main(String[] args)
    {
        // Create new binary tree
        BinaryTree tree = new BinaryTree();
        /*
                 4                            
               /   \    
              12    7    
             / \      \               
            2   3      1
               / \    / 
              6   8  5
             /       
            9          
        -----------------
          Constructing binary tree

        */
        tree.root = new TreeNode(4);
        tree.root.left = new TreeNode(12);
        tree.root.left.right = new TreeNode(3);
        tree.root.left.right.left = new TreeNode(6);
        tree.root.left.right.left.left = new TreeNode(9);
        tree.root.left.right.right = new TreeNode(8);
        tree.root.left.left = new TreeNode(2);
        tree.root.right = new TreeNode(7);
        tree.root.right.right = new TreeNode(1);
        tree.root.right.right.left = new TreeNode(5);
        System.out.print("\n Before replace by depth \n");
        tree.preOrder(tree.root);
        // Update node value by depth
        tree.replaceByDepth(tree.root, 0);
        System.out.print("\n After replace by depth \n");
        tree.preOrder(tree.root);
    }
}

input

 Before replace by depth
  4  12  2  3  6  9  8  7  1  5
 After replace by depth
  0  1  2  2  3  4  3  1  2  3
// Include header file
#include <iostream>
using namespace std;

/*
    C++ Program
    Replace node with depth in a binary tree
*/

// Binary Tree node
class TreeNode
{
	public: 
    int data;
	TreeNode *left;
	TreeNode *right;
	TreeNode(int data)
	{
		// Set node value
		this->data = data;
		this->left = NULL;
		this->right = NULL;
	}
};
class BinaryTree
{
	public: 
    TreeNode *root;
	BinaryTree()
	{
		this->root = NULL;
	}
	void preOrder(TreeNode *node)
	{
		if (node != NULL)
		{
			// Print node value
			cout << "  " << node->data;
			// Visit left subtree
			this->preOrder(node->left);
			// Visit right subtree
			this->preOrder(node->right);
		}
	}
	void replaceByDepth(TreeNode *node, int depth)
	{
		if (node != NULL)
		{
			// Change node value
			node->data = depth;
			// Visit left subtree
			this->replaceByDepth(node->left, depth + 1);
			// Visit right subtree
			this->replaceByDepth(node->right, depth + 1);
		}
	}
};
int main()
{
	// Create new binary tree
	BinaryTree *tree = new BinaryTree();
	/*
	         4                            
	       /   \    
	      12    7    
	     / \      \               
	    2   3      1
	       / \    / 
	      6   8  5
	     /       
	    9          
	-----------------
	  Constructing binary tree
	*/
	tree->root = new TreeNode(4);
	tree->root->left = new TreeNode(12);
	tree->root->left->right = new TreeNode(3);
	tree->root->left->right->left = new TreeNode(6);
	tree->root->left->right->left->left = new TreeNode(9);
	tree->root->left->right->right = new TreeNode(8);
	tree->root->left->left = new TreeNode(2);
	tree->root->right = new TreeNode(7);
	tree->root->right->right = new TreeNode(1);
	tree->root->right->right->left = new TreeNode(5);
	cout << "\n Before replace by depth \n";
	tree->preOrder(tree->root);
	// Update node value by depth
	tree->replaceByDepth(tree->root, 0);
	cout << "\n After replace by depth \n";
	tree->preOrder(tree->root);
	return 0;
}

input

 Before replace by depth
  4  12  2  3  6  9  8  7  1  5
 After replace by depth
  0  1  2  2  3  4  3  1  2  3
// Include namespace system
using System;
/*
    Csharp Program
    Replace node with depth in a binary tree
*/
// Binary Tree node
public class TreeNode
{
	public int data;
	public TreeNode left;
	public TreeNode right;
	public TreeNode(int data)
	{
		// Set node value
		this.data = data;
		this.left = null;
		this.right = null;
	}
}
public class BinaryTree
{
	public TreeNode root;
	public BinaryTree()
	{
		// Set initial tree root to null
		this.root = null;
	}
	public void preOrder(TreeNode node)
	{
		if (node != null)
		{
			// Print node value
			Console.Write("  " + node.data);
			// Visit left subtree
			this.preOrder(node.left);
			// Visit right subtree
			this.preOrder(node.right);
		}
	}
	public void replaceByDepth(TreeNode node, int depth)
	{
		if (node != null)
		{
			// Change node value
			node.data = depth;
			// Visit left subtree
			this.replaceByDepth(node.left, depth + 1);
			// Visit right subtree
			this.replaceByDepth(node.right, depth + 1);
		}
	}
	public static void Main(String[] args)
	{
		// Create new binary tree
		BinaryTree tree = new BinaryTree();
		/*
		         4                            
		       /   \    
		      12    7    
		     / \      \               
		    2   3      1
		       / \    / 
		      6   8  5
		     /       
		    9          
		-----------------
		  Constructing binary tree
		*/
		tree.root = new TreeNode(4);
		tree.root.left = new TreeNode(12);
		tree.root.left.right = new TreeNode(3);
		tree.root.left.right.left = new TreeNode(6);
		tree.root.left.right.left.left = new TreeNode(9);
		tree.root.left.right.right = new TreeNode(8);
		tree.root.left.left = new TreeNode(2);
		tree.root.right = new TreeNode(7);
		tree.root.right.right = new TreeNode(1);
		tree.root.right.right.left = new TreeNode(5);
		Console.Write("\n Before replace by depth \n");
		tree.preOrder(tree.root);
		// Update node value by depth
		tree.replaceByDepth(tree.root, 0);
		Console.Write("\n After replace by depth \n");
		tree.preOrder(tree.root);
	}
}

input

 Before replace by depth
  4  12  2  3  6  9  8  7  1  5
 After replace by depth
  0  1  2  2  3  4  3  1  2  3
<?php
/*
    Php Program
    Replace node with depth in a binary tree
*/
// 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 preOrder($node)
	{
		if ($node != NULL)
		{
			// Print node value
			echo("  ".$node->data);
			// Visit left subtree
			$this->preOrder($node->left);
			// Visit right subtree
			$this->preOrder($node->right);
		}
	}
	public	function replaceByDepth($node, $depth)
	{
		if ($node != NULL)
		{
			// Change node value
			$node->data = $depth;
			// Visit left subtree
			$this->replaceByDepth($node->left, $depth + 1);
			// Visit right subtree
			$this->replaceByDepth($node->right, $depth + 1);
		}
	}
}

function main()
{
	// Create new binary tree
	$tree = new BinaryTree();
	/*
	         4                            
	       /   \    
	      12    7    
	     / \      \               
	    2   3      1
	       / \    / 
	      6   8  5
	     /       
	    9          
	-----------------
	  Constructing binary tree
	*/
	$tree->root = new TreeNode(4);
	$tree->root->left = new TreeNode(12);
	$tree->root->left->right = new TreeNode(3);
	$tree->root->left->right->left = new TreeNode(6);
	$tree->root->left->right->left->left = new TreeNode(9);
	$tree->root->left->right->right = new TreeNode(8);
	$tree->root->left->left = new TreeNode(2);
	$tree->root->right = new TreeNode(7);
	$tree->root->right->right = new TreeNode(1);
	$tree->root->right->right->left = new TreeNode(5);
	echo("\n Before replace by depth \n");
	$tree->preOrder($tree->root);
	// Update node value by depth
	$tree->replaceByDepth($tree->root, 0);
	echo("\n After replace by depth \n");
	$tree->preOrder($tree->root);
}
main();

input

 Before replace by depth
  4  12  2  3  6  9  8  7  1  5
 After replace by depth
  0  1  2  2  3  4  3  1  2  3
/*
    Node JS Program
    Replace node with depth in a binary tree
*/
// Binary Tree node
class TreeNode
{
	constructor(data)
	{
		// Set node value
		this.data = data;
		this.left = null;
		this.right = null;
	}
}
class BinaryTree
{
	constructor()
	{
		this.root = null;
	}
	preOrder(node)
	{
		if (node != null)
		{
			// Print node value
			process.stdout.write("  " + node.data);
			// Visit left subtree
			this.preOrder(node.left);
			// Visit right subtree
			this.preOrder(node.right);
		}
	}
	replaceByDepth(node, depth)
	{
		if (node != null)
		{
			// Change node value
			node.data = depth;
			// Visit left subtree
			this.replaceByDepth(node.left, depth + 1);
			// Visit right subtree
			this.replaceByDepth(node.right, depth + 1);
		}
	}
}

function main()
{
	// Create new binary tree
	var tree = new BinaryTree();
	/*
	         4                            
	       /   \    
	      12    7    
	     / \      \               
	    2   3      1
	       / \    / 
	      6   8  5
	     /       
	    9          
	-----------------
	  Constructing binary tree
	*/
	tree.root = new TreeNode(4);
	tree.root.left = new TreeNode(12);
	tree.root.left.right = new TreeNode(3);
	tree.root.left.right.left = new TreeNode(6);
	tree.root.left.right.left.left = new TreeNode(9);
	tree.root.left.right.right = new TreeNode(8);
	tree.root.left.left = new TreeNode(2);
	tree.root.right = new TreeNode(7);
	tree.root.right.right = new TreeNode(1);
	tree.root.right.right.left = new TreeNode(5);
	process.stdout.write("\n Before replace by depth \n");
	tree.preOrder(tree.root);
	// Update node value by depth
	tree.replaceByDepth(tree.root, 0);
	process.stdout.write("\n After replace by depth \n");
	tree.preOrder(tree.root);
}
main();

input

 Before replace by depth
  4  12  2  3  6  9  8  7  1  5
 After replace by depth
  0  1  2  2  3  4  3  1  2  3
#    Python 3 Program
#    Replace node with depth in a binary tree

#  Binary Tree node
class TreeNode :
	def __init__(self, data) :
		#  Set node value
		self.data = data
		self.left = None
		self.right = None
	

class BinaryTree :
	def __init__(self) :
		self.root = None
	
	def preOrder(self, node) :
		if (node != None) :
			#  Print node value
			print("  ", node.data, end = "")
			#  Visit left subtree
			self.preOrder(node.left)
			#  Visit right subtree
			self.preOrder(node.right)
		
	
	def replaceByDepth(self, node, depth) :
		if (node != None) :
			#  Change node value
			node.data = depth
			#  Visit left subtree
			self.replaceByDepth(node.left, depth + 1)
			#  Visit right subtree
			self.replaceByDepth(node.right, depth + 1)
		
	

def main() :
	#  Create new binary tree
	tree = BinaryTree()
	#         4                            
	#       /   \    
	#      12    7    
	#     / \      \               
	#    2   3      1
	#       / \    / 
	#      6   8  5
	#     /       
	#    9          
	# -----------------
	#  Constructing binary tree
	tree.root = TreeNode(4)
	tree.root.left = TreeNode(12)
	tree.root.left.right = TreeNode(3)
	tree.root.left.right.left = TreeNode(6)
	tree.root.left.right.left.left = TreeNode(9)
	tree.root.left.right.right = TreeNode(8)
	tree.root.left.left = TreeNode(2)
	tree.root.right = TreeNode(7)
	tree.root.right.right = TreeNode(1)
	tree.root.right.right.left = TreeNode(5)
	print("\n Before replace by depth ")
	tree.preOrder(tree.root)
	#  Update node value by depth
	tree.replaceByDepth(tree.root, 0)
	print("\n After replace by depth ")
	tree.preOrder(tree.root)

if __name__ == "__main__": main()

input

 Before replace by depth
   4   12   2   3   6   9   8   7   1   5
 After replace by depth
   0   1   2   2   3   4   3   1   2   3
#    Ruby Program
#    Replace node with depth in a binary tree

#  Binary Tree node
class TreeNode 
	# Define the accessor and reader of class TreeNode
	attr_reader :data, :left, :right
	attr_accessor :data, :left, :right
	def initialize(data) 
		#  Set node value
		self.data = data
		self.left = nil
		self.right = nil
	end

end

class BinaryTree 
	# Define the accessor and reader of class BinaryTree
	attr_reader :root
	attr_accessor :root
	def initialize() 
		self.root = nil
	end

	def preOrder(node) 
		if (node != nil) 
			#  Print node value
			print("  ", node.data)
			#  Visit left subtree
			self.preOrder(node.left)
			#  Visit right subtree
			self.preOrder(node.right)
		end

	end

	def replaceByDepth(node, depth) 
		if (node != nil) 
			#  Change node value
			node.data = depth
			#  Visit left subtree
			self.replaceByDepth(node.left, depth + 1)
			#  Visit right subtree
			self.replaceByDepth(node.right, depth + 1)
		end

	end

end

def main() 
	#  Create new binary tree
	tree = BinaryTree.new()
	#         4                            
	#       /   \    
	#      12    7    
	#     / \      \               
	#    2   3      1
	#       / \    / 
	#      6   8  5
	#     /       
	#    9          
	# -----------------
	#  Constructing binary tree
	tree.root = TreeNode.new(4)
	tree.root.left = TreeNode.new(12)
	tree.root.left.right = TreeNode.new(3)
	tree.root.left.right.left = TreeNode.new(6)
	tree.root.left.right.left.left = TreeNode.new(9)
	tree.root.left.right.right = TreeNode.new(8)
	tree.root.left.left = TreeNode.new(2)
	tree.root.right = TreeNode.new(7)
	tree.root.right.right = TreeNode.new(1)
	tree.root.right.right.left = TreeNode.new(5)
	print("\n Before replace by depth \n")
	tree.preOrder(tree.root)
	#  Update node value by depth
	tree.replaceByDepth(tree.root, 0)
	print("\n After replace by depth \n")
	tree.preOrder(tree.root)
end

main()

input

 Before replace by depth 
  4  12  2  3  6  9  8  7  1  5
 After replace by depth 
  0  1  2  2  3  4  3  1  2  3
/*
    Scala Program
    Replace node with depth in a binary tree
*/
// Binary Tree node
class TreeNode(var data: Int,
	var left: TreeNode,
		var right: TreeNode)
{
	def this(data: Int)
	{
		// Set node value
		this(data,null,null);
	}
}
class BinaryTree(var root: TreeNode)
{
	def this()
	{
		this(null);
	}
	def preOrder(node: TreeNode): Unit = {
		if (node != null)
		{
			// Print node value
			print("  " + node.data);
			// Visit left subtree
			preOrder(node.left);
			// Visit right subtree
			preOrder(node.right);
		}
	}
	def replaceByDepth(node: TreeNode, depth: Int): Unit = {
		if (node != null)
		{
			// Change node value
			node.data = depth;
			// Visit left subtree
			replaceByDepth(node.left, depth + 1);
			// Visit right subtree
			replaceByDepth(node.right, depth + 1);
		}
	}
}
object Main
{
	def main(args: Array[String]): Unit = {
		// Create new binary tree
		var tree: BinaryTree = new BinaryTree();
		/*
		         4                            
		       /   \    
		      12    7    
		     / \      \               
		    2   3      1
		       / \    / 
		      6   8  5
		     /       
		    9          
		-----------------
		  Constructing binary tree
		*/
		tree.root = new TreeNode(4);
		tree.root.left = new TreeNode(12);
		tree.root.left.right = new TreeNode(3);
		tree.root.left.right.left = new TreeNode(6);
		tree.root.left.right.left.left = new TreeNode(9);
		tree.root.left.right.right = new TreeNode(8);
		tree.root.left.left = new TreeNode(2);
		tree.root.right = new TreeNode(7);
		tree.root.right.right = new TreeNode(1);
		tree.root.right.right.left = new TreeNode(5);
		print("\n Before replace by depth \n");
		tree.preOrder(tree.root);
		// Update node value by depth
		tree.replaceByDepth(tree.root, 0);
		print("\n After replace by depth \n");
		tree.preOrder(tree.root);
	}
}

input

 Before replace by depth
  4  12  2  3  6  9  8  7  1  5
 After replace by depth
  0  1  2  2  3  4  3  1  2  3
/*
    Swift 4 Program
    Replace node with depth in a binary tree
*/
// Binary Tree node
class TreeNode
{
	var data: Int;
	var left: TreeNode? ;
	var right: TreeNode? ;
	init(_ data: Int)
	{
		// Set node value
		self.data = data;
		self.left = nil;
		self.right = nil;
	}
}
class BinaryTree
{
	var root: TreeNode? ;
	init()
	{
		self.root = nil;
	}
	func preOrder(_ node: TreeNode? )
	{
		if (node  != nil)
		{
			// Print node value
			print("  ", node!.data, terminator: "");
			// Visit left subtree
			self.preOrder(node!.left);
			// Visit right subtree
			self.preOrder(node!.right);
		}
	}
	func replaceByDepth(_ node: TreeNode? , _ depth : Int)
	{
		if (node  != nil)
		{
			// Change node value
			node!.data = depth;
			// Visit left subtree
			self.replaceByDepth(node!.left, depth + 1);
			// Visit right subtree
			self.replaceByDepth(node!.right, depth + 1);
		}
	}
}
func main()
{
	// Create new binary tree
	let tree = BinaryTree();
	/*
	         4                            
	       /   \    
	      12    7    
	     / \      \               
	    2   3      1
	       / \    / 
	      6   8  5
	     /       
	    9          
	-----------------
	  Constructing binary tree
	*/
	tree.root = TreeNode(4);
	tree.root!.left = TreeNode(12);
	tree.root!.left!.right = TreeNode(3);
	tree.root!.left!.right!.left = TreeNode(6);
	tree.root!.left!.right!.left!.left = TreeNode(9);
	tree.root!.left!.right!.right = TreeNode(8);
	tree.root!.left!.left = TreeNode(2);
	tree.root!.right = TreeNode(7);
	tree.root!.right!.right = TreeNode(1);
	tree.root!.right!.right!.left = TreeNode(5);
	print("\n Before replace by depth ");
	tree.preOrder(tree.root);
	// Update node value by depth
	tree.replaceByDepth(tree.root, 0);
	print("\n After replace by depth ");
	tree.preOrder(tree.root);
}
main();

input

 Before replace by depth
   4   12   2   3   6   9   8   7   1   5
 After replace by depth
   0   1   2   2   3   4   3   1   2   3
/*
    Kotlin Program
    Replace node with depth in a binary tree
*/
// Binary Tree node
class TreeNode
{
	var data: Int;
	var left: TreeNode ? ;
	var right: TreeNode ? ;
	constructor(data: Int)
	{
		// Set node value
		this.data = data;
		this.left = null;
		this.right = null;
	}
}
class BinaryTree
{
	var root: TreeNode ? ;
	constructor()
	{
		this.root = null;
	}
	fun preOrder(node: TreeNode ? ): Unit
	{
		if (node != null)
		{
			// Print node value
			print("  " + node.data);
			// Visit left subtree
			this.preOrder(node.left);
			// Visit right subtree
			this.preOrder(node.right);
		}
	}
	fun replaceByDepth(node: TreeNode ? , depth : Int): Unit
	{
		if (node != null)
		{
			// Change node value
			node.data = depth;
			// Visit left subtree
			this.replaceByDepth(node.left, depth + 1);
			// Visit right subtree
			this.replaceByDepth(node.right, depth + 1);
		}
	}
}
fun main(args: Array < String > ): Unit
{
	// Create new binary tree
	val tree: BinaryTree = BinaryTree();
	/*
	         4                            
	       /   \    
	      12    7    
	     / \      \               
	    2   3      1
	       / \    / 
	      6   8  5
	     /       
	    9          
	-----------------
	  Constructing binary tree
	*/
	tree.root = TreeNode(4);
	tree.root?.left = TreeNode(12);
	tree.root?.left?.right = TreeNode(3);
	tree.root?.left?.right?.left = TreeNode(6);
	tree.root?.left?.right?.left?.left = TreeNode(9);
	tree.root?.left?.right?.right = TreeNode(8);
	tree.root?.left?.left = TreeNode(2);
	tree.root?.right = TreeNode(7);
	tree.root?.right?.right = TreeNode(1);
	tree.root?.right?.right?.left = TreeNode(5);
	print("\n Before replace by depth \n");
	tree.preOrder(tree.root);
	// Update node value by depth
	tree.replaceByDepth(tree.root, 0);
	print("\n After replace by depth \n");
	tree.preOrder(tree.root);
}

input

 Before replace by depth
  4  12  2  3  6  9  8  7  1  5
 After replace by depth
  0  1  2  2  3  4  3  1  2  3


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







© 2021, kalkicode.com, All rights reserved