Given a binary tree and value k. delete all the leaf nodes with value equal to k. If a node becomes leaf after deletion, then it should be deleted if it has value k.
Examples:
Input : 4
/ \
5 5
/ \ /
3 1 5
Output : 4
/
5
/ \
3 1
- Use PostOrder traversal.
- When we encounter leaf nodes, then we check whether it is leaf node or not.
- If it is leaf node and value equal to k, then delete it.
- Else, Recurse for other nodes.
Implementation:
C++
// C++ program to delete leaf nodes with // value equal to k. #include<bits/stdc++.h>using namespace std;struct Node { int data; struct Node *left, *right; }; struct Node* newNode(int data) { struct Node* newNode = new Node; newNode->data = data; newNode->left = newNode->right = NULL; return (newNode); } // Function to delete leaf Node with value // equal to k Node* LeafNodesWithValueK(Node* root, int k) { if (root == NULL) return nullptr; root->left = LeafNodesWithValueK(root->left, k); root->right = LeafNodesWithValueK(root->right, k); // If the node is leaf, and its // value is equal to k if (root->data == k && root->left == NULL && root->right == NULL) { return nullptr; } return root; } void postOrder(Node* root) { if (root == NULL) return; cout << root->data << " "; postOrder(root->left); postOrder(root->right); } // Driver codeint main(){ struct Node* root = newNode(4); root->left = newNode(5); root->right = newNode(5); root->left->left = newNode(3); root->left->right = newNode(1); root->right->right = newNode(5); cout << "Nodes in postorder before deletion \n"; postOrder(root); cout << "\n"; int k = 5; LeafNodesWithValueK(root, k); cout << "Nodes in post order after " "required deletion \n"; postOrder(root); return 0; }// This code is contributed by Stream_Cipher |
Java
// Java program to delete leaf nodes with// value equal to k.class Node { int data; Node left; Node right; public Node(int data) { this.data = data; this.left = null; this.right = null; }}public class LeafNodesWithValueK { // Function to delete leaf Node with value // equal to k static Node delLeafValueK(Node root, int k) { if (root == null) return null; root.left = delLeafValueK(root.left, k); root.right = delLeafValueK(root.right, k); // If the node is leaf, and its // value is equal to k if ((root.left == null && root.right == null) && root.data == k) return null; return root; } static void postOrder(Node root) { if (root == null) return; System.out.print(root.data + " "); postOrder(root.left); postOrder(root.right); } // Driver Code public static void main(String[] args) { Node root = new Node(4); root.left = new Node(5); root.right = new Node(5); root.left.left = new Node(3); root.left.right = new Node(1); root.right.left = new Node(5); System.out.println("Nodes in postorder before deletion"); postOrder(root); System.out.println(); System.out.println("Nodes in post order after required deletion"); int k = 5; delLeafValueK(root, k); postOrder(root); System.out.println(); }} |
Python3
# Python program to delete leaf nodes with value equal to k.class Node: def __init__(self, data): self.data = data self.left = None self.right = None# Function to delete leaf node with value equal to kdef delLeafValueK(root, k): if(root == None): return None root.left = delLeafValueK(root.left, k) root.right = delLeafValueK(root.right, k) # If the node is leaf, and its value is equal to k if((root.left == None and root.right == None) and root.data == k): return None return rootdef postOrder(root): if(root == None): return print(root.data, end=" ") postOrder(root.left) postOrder(root.right)if __name__ == "__main__": root = Node(4) root.left = Node(5) root.right = Node(5) root.left.left = Node(3) root.left.right = Node(1) root.right.left = Node(5) print("Nodes in postorder before deletion") postOrder(root) print() print("Nodes in post order after required deletion") k = 5 delLeafValueK(root, k) postOrder(root) print()# This code is contributed by lokeshmvs21. |
C#
// C# program to delete leaf nodes with// value equal to k.using System;public class Node { public int data; public Node left; public Node right; public Node(int data) { this.data = data; this.left = null; this.right = null; }}public class LeafNodesWithValueK { // Function to delete leaf Node with value // equal to k static Node delLeafValueK(Node root, int k) { if (root == null) return null; root.left = delLeafValueK(root.left, k); root.right = delLeafValueK(root.right, k); // If the node is leaf, and its // value is equal to k if ((root.left == null && root.right == null) && root.data == k) return null; return root; } static void postOrder(Node root) { if (root == null) return; Console.Write(root.data + " "); postOrder(root.left); postOrder(root.right); } // Driver Code public static void Main(String[] args) { Node root = new Node(4); root.left = new Node(5); root.right = new Node(5); root.left.left = new Node(3); root.left.right = new Node(1); root.right.left = new Node(5); Console.WriteLine("Nodes in postorder before deletion"); postOrder(root); Console.WriteLine(); Console.WriteLine("Nodes in post order after required deletion"); int k = 5; delLeafValueK(root, k); postOrder(root); Console.WriteLine(); }}// This code has been contributed by 29AjayKumar |
Javascript
<script>// JavaScript program to delete leaf nodes with// value equal to k.class Node { constructor(data) { this.data = data; this.left = null; this.right = null; }}// Function to delete leaf Node with value // equal to kfunction delLeafValueK(root, k){ if (root == null) return null; root.left = delLeafValueK(root.left, k); root.right = delLeafValueK(root.right, k); // If the node is leaf, and its // value is equal to k if ((root.left == null && root.right == null) && root.data == k) return null; return root;}function postOrder(root){ if (root == null) return; document.write(root.data + " "); postOrder(root.left); postOrder(root.right);}// Driver Codevar root = new Node(4);root.left = new Node(5);root.right = new Node(5);root.left.left = new Node(3);root.left.right = new Node(1);root.right.left = new Node(5);document.write("Nodes in postorder before deletion<br>");postOrder(root);document.write("<br>");document.write("Nodes in post order after required deletion<br>");var k = 5;delLeafValueK(root, k);postOrder(root);document.write("<br>");</script> |
Nodes in postorder before deletion 4 5 3 1 5 5 Nodes in post order after required deletion 4 5 3 1
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!
