算法题001 -- [二叉树的镜像] by java

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cjh_android/article/details/82788496

程序运行截图:
在这里插入图片描述

import java.util.HashMap;

public class Algorithm1 {
	/*
    [二叉树的镜像]
    
    [题目]
    操作给定的二叉树,将其变换为源二叉树的镜像。
    二叉树的镜像定义:
    源二叉树
    8
    | |
    6 10
    | | | |
    5 7 9 11
    镜像二叉树
    8
    | |
    10 6
    | | | |
    11 9 7 5
*/
	private static boolean printRoot = true;

	public static void main(String[] args) {
		TreeNode test = createTestTree();
		printTree(test, false);
		swapTreeNodeChild(test);
		System.out.println("---------------------------");
		printTree(test, false);
	}

	public static TreeNode createTestTree() {
		TreeNode node5 = new TreeNode(2, 5, null, null);
		TreeNode node7 = new TreeNode(2, 7, null, null);
		TreeNode node9 = new TreeNode(2, 9, null, null);
		TreeNode node11 = new TreeNode(2, 11, null, null);
		TreeNode node6 = new TreeNode(1, 6, node5, node7);
		TreeNode node10 = new TreeNode(1, 10, node9, node11);
		TreeNode node8 = new TreeNode(0, 8, node6, node10);
		return node8;
	}

	public static void swapTreeNodeChild(TreeNode node) {
		if (node != null) {
			TreeNode temp = node.leftNode;
			node.leftNode = node.rightNode;
			node.rightNode = temp;
			swapTreeNodeChild(node.leftNode);
			swapTreeNodeChild(node.rightNode);
		}
	}

	public static void printTree(TreeNode node, boolean isLeftNode) {
		HashMap<Integer, StringBuilder> map = new HashMap<>();
		mapTreeNode(node, map);
		for(Integer i : map.keySet()) {
			System.out.println(map.get(i).toString()+"\n");
		}
	}

	public static void mapTreeNode(TreeNode node, HashMap<Integer, StringBuilder> map) {
		if (node != null) {
			StringBuilder sb = map.get(node.depth);
			if (sb == null)
				sb = new StringBuilder();
			sb.append(node.content+" ");
			map.put(node.depth, sb);
			mapTreeNode(node.leftNode, map);
			mapTreeNode(node.rightNode, map);
		}
	}
}

猜你喜欢

转载自blog.csdn.net/cjh_android/article/details/82788496