java-二叉树中节点查找与删除子树

二叉树中节点的查找

实现的步骤:递归实现先查找当前节点,在查找当前节点的子节点,在查找当前节点的右节点。

/**
	 * 二叉树中节点的查找
	 * @param rootNode
	 * @param str
	 */
	public static Node searchNode(Node rootNode,String str) {
          
   
		Node currentNode = null;
		if(rootNode.value.equals(str)) {
          
   
			return rootNode;
		}else {
          
   
			if (rootNode.leftNode!=null) {
          
   
				currentNode = searchNode(rootNode.leftNode, str);
			}
			
			if(currentNode!=null) {
          
   
				return currentNode;
			}
			
			if(rootNode.rightNode!=null) {
          
   
				currentNode = searchNode(rootNode.rightNode, str);
			}
		}
		
		return currentNode;
	}
	public static void main(String[] args) {
          
   
		// 创建二叉树
		Node nodeA = new Node("A");
		Node nodeB = new Node("B");
		Node nodeC = new Node("C");
		Node nodeD = new Node("D");
		Node nodeE = new Node("E");
		Node nodeF = new Node("F");
		Node nodeG = new Node("G");
		nodeA.leftNode = nodeB;
		nodeA.rightNode = nodeC;
		nodeB.leftNode = nodeD;
		nodeB.rightNode = nodeE;
		nodeC.leftNode = nodeF;
		nodeC.rightNode = nodeG;
		
		// 二叉树节点的查找
		Node node = searchNode(nodeA, "G");
		System.out.println(node);
		
	}
二叉树中子树的删除

递归判断当前节点是不是要删除的节点,在判断当前节点的左节点是不是要删除的节点,在判断当前节点的右节点是不是要删除的节点。

/**
	 * 非递归方式前序遍历
	 * @param rootNode
	 */
	public static void preOrderNon(Node rootNode) {
          
   
		if (rootNode == null) return;
		Stack<Node> stack = new Stack<Node>();
		stack.push(rootNode);
		while(!stack.isEmpty()) {
          
   
			Node node = stack.pop();
			System.out.print(node.value);
			if (node.rightNode!=null) stack.push(node.rightNode);  
			if (node.leftNode!=null) stack.push(node.leftNode);
		}
	}
	/**
	 * 二叉树中节点的删除
	 * @param rooNode
	 * @param str
	 */
	public static void delNode(Node rootNode,String str) {
          
   
		
		if(rootNode.value.equals(str)) {
          
   
			rootNode.leftNode = null;
			rootNode.rightNode = null;
			rootNode.value = "";
		}else {
          
   
			if (rootNode.leftNode!=null) {
          
   
				delNode(rootNode.leftNode, str);
			}
			
			if(rootNode.rightNode!=null) {
          
   
				delNode(rootNode.rightNode, str);
			}
		}
		public static void main(String[] args) {
          
   
		// 创建二叉树
		Node nodeA = new Node("A");
		Node nodeB = new Node("B");
		Node nodeC = new Node("C");
		Node nodeD = new Node("D");
		Node nodeE = new Node("E");
		Node nodeF = new Node("F");
		Node nodeG = new Node("G");
		nodeA.leftNode = nodeB;
		nodeA.rightNode = nodeC;
		nodeB.leftNode = nodeD;
		nodeB.rightNode = nodeE;
		nodeC.leftNode = nodeF;
		nodeC.rightNode = nodeG;		
		// 二叉树节点的删除
		delNode(nodeA, "F");
		// 前序遍历二叉树:
		preOrderNon(nodeA);
		
	}
经验分享 程序员 微信小程序 职场和发展