Skip to main content

Check if all leaf nodes are at same level in ruby

Ruby program for Check if all leaf nodes are at same level. Here problem description and other solutions.

#  Ruby program for
#  Check if all leaves are at same level 

#  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, :depth
	attr_accessor :root, :depth
	def initialize() 
		self.root = nil
		self.depth = -1
	end

	def checkLeafHeight(node, level) 
		if (node != nil) 
			#  Test node is leaf or not
			if (node.left == nil && node.right == nil) 
				if (self.depth == -1) 
					#  This is first leaf node
					#  Get node level
					self.depth = level
				elsif(self.depth != level) 
					#  When two leaf nodes is different level
					self.depth = -2
					return
				end

			end

			if (self.depth != -2) 
				#  Recursively visit left and right subtree
				self.checkLeafHeight(node.left, level + 1)
				self.checkLeafHeight(node.right, level + 1)
			end

		end

	end

	def isSameLevelLeaf() 
		self.depth = -1
		#  Test
		self.checkLeafHeight(self.root, 1)
		#  Display result
		if (self.depth < 0) 
			#  Two possible case
			#  1) When tree empty
			#  2) When leaf node are not same level
			print("No\n")
		else
 
			#  When leaf node is same level
			print("Yes\n")
		end

	end

end

def main() 
	#  Create new tree
	tree = BinaryTree.new()
	#    Make A Binary Tree
	#    --------------------
	#      1
	#     /  \
	#    2    3
	#   /    /  \
	#  4    5    6
	# insertion of binary Tree nodes
	tree.root = TreeNode.new(1)
	tree.root.left = TreeNode.new(2)
	tree.root.right = TreeNode.new(3)
	tree.root.right.right = TreeNode.new(6)
	tree.root.right.left = TreeNode.new(5)
	tree.root.left.left = TreeNode.new(4)
	tree.isSameLevelLeaf()
	#  Add new node
	tree.root.left.left.left = TreeNode.new(7)
	#   When add new node
	#    -----------------------
	#          1
	#         /  \
	#        2    3
	#       /    /  \
	#      4    5    6
	#     /
	#    7  
	tree.isSameLevelLeaf()
end

main()

Output

Yes
No




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