QA–位置测验|时钟

我们讨论了删除整个二叉树的递归实现 在这里 . 我们强烈建议您尽量减少浏览器,并先自己尝试。 现在,如何在不使用递归的情况下删除整个树。这可以很容易地在计算机的帮助下完成 级序树遍历 . 其想法是,对于队列中的每个出列节点,在对其左侧和右侧节点(如果有)进行排队后将其删除。当我们从上到下逐级遍历树的所有节点时,解决方案就会起作用,在删除父节点之前,我们将其子节点存储到队列中,稍后将删除该队列。

null

C++

/* Non-Recursive Program to delete an entire binary tree. */
#include <bits/stdc++.h>
using namespace std;
// A Binary Tree Node
struct Node
{
int data;
struct Node *left, *right;
};
/* Non-recursive function to delete an entire binary tree. */
void _deleteTree(Node *root)
{
// Base Case
if (root == NULL)
return ;
// Create an empty queue for level order traversal
queue<Node *> q;
// Do level order traversal starting from root
q.push(root);
while (!q.empty())
{
Node *node = q.front();
q.pop();
if (node->left != NULL)
q.push(node->left);
if (node->right != NULL)
q.push(node->right);
free (node);
}
}
/* Deletes a tree and sets the root as NULL */
void deleteTree(Node** node_ref)
{
_deleteTree(*node_ref);
*node_ref = NULL;
}
// Utility function to create a new tree Node
Node* newNode( int data)
{
Node *temp = new Node;
temp->data = data;
temp->left = temp->right = NULL;
return temp;
}
// Driver program to test above functions
int main()
{
// create a binary tree
Node *root =  newNode(15);
root->left = newNode(10);
root->right = newNode(20);
root->left->left = newNode(8);
root->left->right = newNode(12);
root->right->left = newNode(16);
root->right->right = newNode(25);
//delete entire binary tree
deleteTree(&root);
return 0;
}


JAVA

/* Non-recursive program to delete the entire binary tree */
import java.util.*;
// A binary tree node
class Node
{
int data;
Node left, right;
public Node( int data)
{
this .data = data;
left = right = null ;
}
}
class BinaryTree
{
Node root;
/* Non-recursive function to delete an entire binary tree. */
void _deleteTree()
{
// Base Case
if (root == null )
return ;
// Create an empty queue for level order traversal
Queue<Node> q = new LinkedList<Node>();
// Do level order traversal starting from root
q.add(root);
while (!q.isEmpty())
{
Node node = q.peek();
q.poll();
if (node.left != null )
q.add(node.left);
if (node.right != null )
q.add(node.right);
}
}
/* Deletes a tree and sets the root as NULL */
void deleteTree()
{
_deleteTree();
root = null ;
}
// Driver program to test above functions
public static void main(String[] args)
{
// create a binary tree
BinaryTree tree = new BinaryTree();
tree.root = new Node( 15 );
tree.root.left = new Node( 10 );
tree.root.right = new Node( 20 );
tree.root.left.left = new Node( 8 );
tree.root.left.right = new Node( 12 );
tree.root.right.left = new Node( 16 );
tree.root.right.right = new Node( 25 );
// delete entire binary tree
tree.deleteTree();
}
}
// This code has been contributed by Mayank Jaiswal(mayank_24)


Python3

# Python program to delete an entire binary tree
# using non-recursive approach
# A binary tree node
class Node:
# A constructor to create a new node
def __init__( self , data):
self .data = data
self .left = None
self .right = None
# Non-recursive function to delete an entrie binary tree
def _deleteTree(root):
# Base Case
if root is None :
return
# Create a empty queue for level order traversal
q = []
# Do level order traversal starting from root
q.append(root)
while ( len (q)> 0 ):
node = q.pop( 0 )
if node.left is not None :
q.append(node.left)
if node.right is not None :
q.append(node.right)
node = None
return node
# Deletes a tree and sets the root as None
def deleteTree(node_ref):
node_ref = _deleteTree(node_ref)
return node_ref
# Driver program to test above function
# Create a binary tree
root = Node( 15 )
root.left = Node( 10 )
root.right = Node( 20 )
root.left.left = Node( 8 )
root.left.right = Node( 12 )
root.right.left = Node( 16 )
root.right.right = Node( 25 )
# delete entire binary tree
root = deleteTree(root)
# This program is contributed by Nikhil Kumar Singh(nickzuck_007)


C#

/* Non-recursive program to delete the entire binary tree */
using System;
using System.Collections.Generic;
// A binary tree node
public class Node
{
public int data;
public Node left, right;
public Node( int data)
{
this .data = data;
left = right = null ;
}
}
public class BinaryTree
{
Node root;
/* Non-recursive function to
delete an entire binary tree. */
void _deleteTree()
{
// Base Case
if (root == null )
return ;
// Create an empty queue for level order traversal
Queue<Node> q = new Queue<Node>();
// Do level order traversal starting from root
q.Enqueue(root);
while (q.Count != 0)
{
Node node = q.Peek();
q.Dequeue();
if (node.left != null )
q.Enqueue(node.left);
if (node.right != null )
q.Enqueue(node.right);
}
}
/* Deletes a tree and sets the root as NULL */
void deleteTree()
{
_deleteTree();
root = null ;
}
// Driver program to test above functions
public static void Main(String[] args)
{
// create a binary tree
BinaryTree tree = new BinaryTree();
tree.root = new Node(15);
tree.root.left = new Node(10);
tree.root.right = new Node(20);
tree.root.left.left = new Node(8);
tree.root.left.right = new Node(12);
tree.root.right.left = new Node(16);
tree.root.right.right = new Node(25);
// delete entire binary tree
tree.deleteTree();
}
}
// This code has been contributed by 29AjayKumar


Javascript

<script>
/* Non-recursive program to delete the entire binary tree */
// A binary tree node
class Node
{
constructor(data)
{
this .data = data;
this .left = this .right = null ;
}
}
let root;
/* Non-recursive function to delete an entire binary tree. */
function _deleteTree()
{
// Base Case
if (root == null )
return ;
// Create an empty queue for level order traversal
let q = [];
// Do level order traversal starting from root
q.push(root);
while (q.length != 0)
{
let node = q.shift();
if (node.left != null )
q.push(node.left);
if (node.right != null )
q.push(node.right);
}
}
/* Deletes a tree and sets the root as NULL */
function deleteTree()
{
_deleteTree();
root = null ;
}
// Driver program to test above functions
root = new Node(15);
root.left = new Node(10);
root.right = new Node(20);
root.left.left = new Node(8);
root.left.right = new Node(12);
root.right.left = new Node(16);
root.right.right = new Node(25);
// delete entire binary tree
deleteTree();
// This code is contributed by rag2127
</script>


本文由 阿迪蒂亚·戈尔 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以写一篇文章,然后将文章邮寄给评论-team@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。 如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写评论

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享