public class TreeManipulator<E> {
public TreeManipulator() {
}
public BinaryNode<E> flipTree(BinaryNode<E> _root) {
BinaryNode<E> root = new BinaryNode<>(_root.getItem());
if (_root.getLeft() != null) {
root.setRight(new BinaryNode<>(_root.getLeft().getItem()));
this.flipTree(_root.getLeft());
}
if (_root.getRight() != null) {
root.setLeft(new BinaryNode<>(_root.getRight().getItem()));
this.flipTree(_root.getRight());
}
return root;
}
}
主要方法:
public static void main(String[] args) {
Integer one = 1;
Integer two = 2;
Integer three = 3;
Integer four = 4;
Integer five = 5;
Integer six = 6;
Integer seven = 7;
Integer eight = 8;
//Root Node = x
BinaryNode<Integer> x = new BinaryNode<>(one);
//X.getLeft = y
BinaryNode<Integer> y;
//X.getRight = z
BinaryNode<Integer> z;
x.setLeft(new BinaryNode<>(two));
x.getLeft().setLeft(new BinaryNode<>(six));
x.getLeft().setRight(new BinaryNode<>(seven));
x.setRight(new BinaryNode<>(three));
x.getRight().setRight(new BinaryNode<>(four));
x.getRight().setLeft(new BinaryNode<>(five));
//Set root children for easier access
z = x.getRight();
y = x.getLeft();
System.out.println(x.toStringPreorder());
//Create tree manipulator
TreeManipulator flop = new TreeManipulator();
BinaryNode<Integer> flipped = flop.flipTree(x);
System.out.println(flipped.toStringPreorder());
}
如果您需要类'BinaryNode',请询问,我会张贴它,我不想用代码交换这个问题...
输入:
我不明白为什么节点'2'和'3'返回时左值和右值为null。
您使用的递归错误,fliptree
不会翻转您放入的对象,而是返回原始输入的翻转副本。更重要的是,您甚至没有将该输入作为根的子项,您只是将一个只包含值的节点放入,这就是为什么您只得到深度为1的树的原因。
这应该可以解决这个问题:
public BinaryNode<E> flipTree(BinaryNode<E> _root) {
BinaryNode<E> root = new BinaryNode<>(_root.getItem());
if (_root.getLeft() != null) {
root.setRight(flipTree(_root.getLeft());
}
if (_root.getRight() != null) {
root.setLeft(flipTree(_root.getRight());
}
return root;
}
如果您确实希望flipTree只是翻转树本身,而不是返回翻转后的版本,则必须执行以下操作:
public void flipTree(BinaryNode<E> root) {
BinaryNode<E> temp = root.getLeft();
root.setLeft(root.getRight());
root.setRight(temp);
if (root.getLeft() != null) {
flipTree(root.getLeft());
}
if (root.getRight() != null) {
flipTree(root.getRight());
}
}
主要内容:递归实现,非递归实现二叉树后序遍历的实现思想是:从根节点出发,依次遍历各节点的左右子树,直到当前节点左右子树遍历完成后,才访问该节点元素。 图 1 二叉树 如图 1 中,对此二叉树进行后序遍历的操作过程为: 从根节点 1 开始,遍历该节点的左子树(以节点 2 为根节点); 遍历节点 2 的左子树(以节点 4 为根节点); 由于节点 4 既没有左子树,也没有右子树,此时访问该节点中的元素 4,并回退到节点 2 ,遍
主要内容:递归实现,非递归实现二叉树中序遍历的实现思想是: 访问当前节点的左子树; 访问根节点; 访问当前节点的右子树; 图 1 二叉树 以图 1 为例,采用中序遍历的思想遍历该二叉树的过程为: 访问该二叉树的根节点,找到 1; 遍历节点 1 的左子树,找到节点 2; 遍历节点 2 的左子树,找到节点 4; 由于节点 4 无左孩子,因此找到节点 4,并遍历节点 4 的右子树; 由于节点 4 无右子树,因此节点 2 的左子
主要内容:递归实现,非递归实现二叉树先序遍历的实现思想是: 访问根节点; 访问当前节点的左子树; 若当前节点无左子树,则访问当前节点的右子树; 图 1 二叉树 以图 1 为例,采用先序遍历的思想遍历该二叉树的过程为: 访问该二叉树的根节点,找到 1; 访问节点 1 的左子树,找到节点 2; 访问节点 2 的左子树,找到节点 4; 由于访问节点 4 左子树失败,且也没有右子树,因此以节点 4 为根节点的子树遍历完成。但节点
本文向大家介绍Python3 翻转二叉树的实现,包括了Python3 翻转二叉树的实现的使用技巧和注意事项,需要的朋友参考一下 提出问题:翻转一棵二叉树。(除根结点以外) 原始二叉树: 新二叉树: 解题思路:遇见二叉树先想到递归。从最下层的叶子结点开始置换左右子节点,一直置换到到最上层的根结点的左右节点为止。 代码如下( ̄▽ ̄): 时间与空间消耗: 问题来源:https://leetcode-cn
本文向大家介绍数据结构 二叉树的递归与非递归,包括了数据结构 二叉树的递归与非递归的使用技巧和注意事项,需要的朋友参考一下 数据结构 二叉树的递归与非递归 实例代码: 先序遍历(递归法) 后序遍历 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
我试图为我的BST做一个递归加法。public add方法接受一个int参数,private方法接受相同的int和一个节点。这是我目前掌握的代码 我经常得到空指针,也尝试过调试,但我的逻辑中有一些我看不到的缺陷。