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