I create a binary tree, now I want to remove a node. I hope that you can provide me some input. The nodes are composed of characters instead of numbers.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BinaryTree
{
public class BinaryTree
{
private BinaryTreeNode root;
public BinaryTree()
{
root = null;
}
public void insert(char c)
{
addNode(c, ref root);
}
private void addNode(char c, ref BinaryTreeNode rptr)
{
if (rptr == null)
rptr = new BinaryTreeNode(c);
else if (rptr.left == null)
addNode(c, ref rptr.left);
else if (rptr.right == null)
addNode(c, ref rptr.right);
else
addNode(c, ref rptr.left);
}
public void inOrderTraversal()
{
inOrderTraversalHelper(root);
}
private void inOrderTraversalHelper(BinaryTreeNode r)
{
if (r != null)
{
inOrderTraversalHelper(r.left);
Console.Write("{0} ", r.id);
inOrderTraversalHelper(r.right);
}
}
public void preOrderTraversal()
{
preOrderTraversalHelper(root);
}
private void preOrderTraversalHelper(BinaryTreeNode r)
{
if (r != null)
{
Console.Write("{0} ", r.id);
preOrderTraversalHelper(r.left);
preOrderTraversalHelper(r.right);
}
}
public void postOrderTraversal()
{
postOrderTraversalHelper(root);
}
private void postOrderTraversalHelper(BinaryTreeNode r)
{
if (r != null)
{
postOrderTraversalHelper(r.left);
postOrderTraversalHelper(r.right);
Console.Write("{0} ", r.id);
}
}
public void removeNode(char c)
{
deleteNode(c, ref root);
}
private void deleteNode(char c, ref BinaryTreeNode root)
{
if (root == null)
{ }
else
{
if (root.left.id != c)
{
deleteNode(c, ref root.left);
}
else if (root.right.id != c)
{
deleteNode(c, ref root.right);
}
else if (root.left.id == c)
{
root.left = root.left.left;
}
else if(root.right.id == c)
{
root.right = root.right.right;
}
}
}
}
public class BinaryTreeNode
{
public char id { get; set; }
public BinaryTreeNode left;
public BinaryTreeNode right;
public BinaryTreeNode()
{
left = right = null;
}
public BinaryTreeNode(char _id)
{
id = _id;
left = right = null;
}
}
}
The main program is:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BinaryTree
{
class Program
{
static void Main(string[] args)
{
BinaryTree b = new BinaryTree();
b.insert('A');
b.insert('B');
b.insert('C');
b.insert('D');
b.insert('E');
b.insert('G');
b.insert('H');
b.insert('F');
b.insert('J');
b.insert('K');
b.insert('L');
Console.WriteLine("The Inorder Traversal:\n");
b.inOrderTraversal();
Console.WriteLine("\n\nThe Preorder Traversal:\n");
b.preOrderTraversal();
Console.WriteLine("\n\nThe Postorder Traversal:\n");
b.postOrderTraversal();
b.removeNode('F');
b.inOrderTraversal();
Console.WriteLine("The Inorder Traversal after delete a node:\n");
Console.WriteLine();
}
}
}