删除值为 k 的叶节点
给定一棵二叉树和值 k。删除所有值等于 k 的叶节点。如果一个节点在删除后变为叶子,那么如果它的值为 k,则应该将其删除。
例子:
Input : 4
/ \
5 5
/ \ /
3 1 5
Output : 4
/
5
/ \
3 1
1.使用PostOrder遍历。
2.遇到叶子节点时,检查是否是叶子节点。
3.如果是叶子节点并且值等于k,则删除它。
4.否则,对其他节点进行递归。
C++
// C++ program to delete leaf nodes with
// value equal to k.
#include
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 code
int 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();
}
}
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
输出:
Nodes in postorder before deletion
4 5 3 1 5 5
Nodes in post order after required deletion
4 5 3 1