【编程练习】二叉树的反转,Java和Python实现

Java实现

// 二叉树节点定义
public class BinaryTreefanzhuan {
    class TreeNode{
        int value;
        TreeNode left;
        TreeNode right;
    }

// 递归


public static TreeNode invertNode(TreeNode root){
    if (root == null)
            return null;
    TreeNode temp = root.left;
    root.left = invertNode(root.right);
    root.right = invertNode(temp);
    return root;
}


// 非递归
//交换左右节点后,将这个两个节点放入队列,继续下一层交换

public static TreeNode invertNode2(TreeNode root){
    if (root == null)
        return null;
    Queue<TreeNode> nodeQueue = new LinkedList<TreeNode>();
    while(!nodeQueue.isEmpty()){
        TreeNode current = nodeQueue.poll();
        TreeNode temp = current.left;
        current.left = current.right;
        current.right = temp;
        if (current.left != null)
            nodeQueue.add(current.left);
        if (current.right != null)
            nodeQueue.add(current.right);
    }
    return root;
}

Python实现

# 节点类
class TreeNode(object):
    def __init__(self, value, left, right):
        self.value = value
        self.left = left
        self.right = right
# 二叉树类
class BinaryTree(Object):
    def __init__(self, value):
        self.value = value

    # 递归实现

    def invert(self, root):
        if root == None:
            return None
        temp = root.left
        root.left = self.invert(root.right)
        root.right = self.invert(temp)
        return root

    # 非递归实现

    def invert2(self, root):
        if root == None:
            return None
        nodeQueue = Queue.Queue
        nodeQueue.put(root)
        while nodeQueue.not_empty:
            cur = nodeQueue.get()
            temp = cur.left
            cur.left = cur.right
            cur.right = temp
            if cur.left != None:
                nodeQueue.put(cur.left)
            if cur.right != None:
                nodeQueue.put(cur.right)
        return root

猜你喜欢

转载自blog.csdn.net/evillist/article/details/77101542
今日推荐