删除树中的叶子节点
遍历树中的每个节点,验证它是否有左子节点、右子节点或两者都有。如果它没有任何子节点,则删除该特定节点。
示例
class Node{ int data; Node leftNode, rightNode; Node() { leftNode = null; rightNode = null; this.data = data; } Node(int data) { leftNode = null; rightNode = null; this.data = data; } int getData() { return this.data; } Node getleftNode() { return this.leftNode; } Node getRightNode() { return this.leftNode; } void setData(int data) { this.data = data; } void setleftNode(Node leftNode) { this.leftNode = leftNode; } void setRightNode(Node rightNode) { this.leftNode = rightNode; } } public class RemovingLeaf { public static void main(String[] args) { Node node = new Node(50); node.leftNode = new Node(60); node.leftNode.leftNode = new Node(45); node.leftNode.rightNode = new Node(64); node.rightNode = new Node(60); node.rightNode.leftNode = new Node(45); node.rightNode.rightNode = new Node(64); node.leftNode.leftNode.leftNode = new Node(96); System.out.println("Contents of the tree:"); preOrder(node); removeLeaves(node); System.out.println(); System.out.println("Contents of the tree after removing leafs:"); preOrder(node); } public static void removeLeaves(Node node) { if (node.leftNode != null) { // tests left root if (node.leftNode.leftNode == null && node.leftNode.rightNode == null) { node.leftNode = null; // delete } else { removeLeaves(node.leftNode); } } } public static void preOrder(Node root) { if(root !=null) { System.out.print(root.data+" "); preOrder(root.leftNode); preOrder(root.rightNode); } } }
输出
Contents of the tree: 50 60 45 96 64 60 45 64 Contents of the tree after removing leafs: 50 60 45 64 60 45 64
广告