目次
事前順序トラバーサルの非再帰的実装 (スタックスタックを使用)
: バイナリ ツリーのルート ノード ルートを指定すると、その順序トラバーサルを返します。
インオーダートラバーサルの非再帰的実装 (スタックスタックを使用)
インオーダートラバーサルの非再帰的実装 (スタックスタックを使用)
トラバーサル(Traversal)とは、ツリー内の各ノードを一度だけ訪問し、事前順序トラバーサル(事前順序トラバーサルとも呼ばれます)を訪問するために、特定の検索ルートをたどることを指します(事前順序トラバーサルは、ルートノードを訪問します)。 > ルートの左サブツリー ---> ルートの右サブツリー。
インオーダートラバーサル (Inorder Traversal) - ルートの左側のサブツリー ---> ルート ノード ---> ルートの右側のサブツリー。
ポストオーダー トラバーサル (ポストオーダー トラバーサル) - ルートの左側のサブツリー ---> ルートの右側のサブツリー ---> ルート ノード
バイナリ ツリーの事前順序走査
トピック
:バイナリ ツリーのルート ノードを与え 、root
そのノード値の 事前順序 走査 を返します。
事前注文トラバーサル トピック リンク
: https://leetcode.cn/problems/binary-tree-preorder-traversal/
再帰的コード
1.メソッドの値を返すコードを使用します。
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> ret = new ArrayList<Integer>();
if(root==null){
return ret;
}
ret.add(root.val);
List<Integer> leftTree=preorderTraversal(root.left);
ret.addAll(leftTree);
List<Integer> rightTree=preorderTraversal(root.right);
ret.addAll(rightTree);
return ret;
}
}
2.戻り値が void のコード
// 前序遍历 根 左子树 右子树
public void preOrder(BTNode root) {
if (root == null) {
return;
}
System.out.print(root.value + " ");
preOrder(root.left);
preOrder(root.right);
}
事前順序トラバーサルの非再帰的実装 (スタックスタックを使用)
1.メソッドの値を返すコードを使用します。
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> ret = new ArrayList<>();
if (root == null) {
return ret;
}
TreeNode cur = root;
Deque<TreeNode> stack = new ArrayDeque<>();
while (cur != null || !stack.isEmpty()) {
while (cur != null) {
stack.push(cur);
//System.out.print(cur.val + " ");
ret.add(cur.val);
cur = cur.left;
}
TreeNode top = stack.pop();
cur = top.right;
}
return ret;
}
}
2.戻り値が void のコード
class Solution {
public void preOrderNor(BTNode root) {
if (root == null) {
return;
}
BTNode cur = root;
Deque<BTNode> stack = new ArrayDeque<>();
while (cur != null || !stack.isEmpty()) {
while (cur != null) {
stack.push(cur);
System.out.println(cur.value + " ");
cur = cur.left;
}
BTNode top = stack.pop();
cur = top.right;
}
}
}
バイナリツリーの順序トラバース
トピック
: バイナリ ツリーのルート ノードを指定すると root
、 その 順序 トラバーサルを返します 。
順序トラバーサル トピック リンク
: https://leetcode.cn/problems/binary-tree-inorder-traversal/
再帰的コード
1.メソッドの値を返すコードを使用します。
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> ret = new ArrayList<>();
if (root == null) {
return ret;
}
List<Integer> leftTree = inorderTraversal(root.left);
ret.addAll(leftTree);
ret.add(root.val);
List<Integer> rightTree =inorderTraversal(root.right);
ret.addAll(rightTree);
return ret;
}
}
2. 戻り値が void のコード
// 中序遍历 左子树 根 右子树
public void inOrder(BTNode root) {
if (root == null) {
return;
}
inOrder(root.left);
System.out.print(root.value + " ");
inOrder(root.right);
}
インオーダートラバーサルの非再帰的実装 (スタックスタックを使用)
1.メソッドの値を返すコードを使用します。
class Solution{
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> ret = new ArrayList<>();
if (root == null) {
return ret;
}
TreeNode cur = root;
Deque<TreeNode> stack = new ArrayDeque<>();
while (cur != null || !stack.isEmpty()) {
while (cur != null) {
stack.push(cur);
cur = cur.left;
}
TreeNode top = stack.pop();
ret.add(top.val);
cur = top.right;
}
return ret;
}
}
2. 戻り値が void のコード
class Solution{
public void inOrderNor(BTNode root) {
if (root == null) {
return;
}
BTNode cur = root;
Deque<BTNode> stack = new ArrayDeque<>();
while (cur != null || !stack.isEmpty()) {
while (cur != null) {
stack.push(cur);
cur = cur.left;
}
BTNode top = stack.pop();
System.out.println(top.value + " ");
cur = top.right;
}
}
}
バイナリ ツリーの事後走査
トピック
:バイナリ ツリーのルート ノードが与えられると root
、 そのノード値の事後探索を 返します。
注文後のトラバーサル トピック リンク
: https://leetcode.cn/problems/binary-tree-postorder-traversal/
再帰的コード
1. メソッドの値を返すコードを使用します。
class Solution {
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> ret = new ArrayList<Integer>();
if(root==null){
return ret;
}
List<Integer> leftTree = postorderTraversal(root.left);
ret.addAll(leftTree);
List<Integer> rightTree = postorderTraversal(root.right);
ret.addAll(rightTree);
ret.add(root.val);
return ret;
}
}
2. 戻り値が void のコード
// 后序遍历
public void postOrder(BTNode root) {
if (root == null) {
return;
}
postOrder(root.left);
postOrder(root.right);
System.out.print(root.value + " ");
}
インオーダートラバーサルの非再帰的実装 (スタックスタックを使用)
1.メソッドの値を返すコードを使用します。
class Solution{
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> ret = new ArrayList<>();
if (root == null) {
return ret;
}
TreeNode cur = root;
TreeNode prev = null;
Deque<TreeNode> stack = new ArrayDeque<>();
while (cur != null || !stack.isEmpty()) {
while (cur != null) {
stack.push(cur);
cur = cur.left;
}
TreeNode top = stack.peek();
if (top.right == null || top.right == prev) {
//System.out.println(top.value + " ");
ret.add(top.val);
stack.pop();
prev = top;
} else {
cur = top.right;
}
}
return ret;
}
}
2. 戻り値が void のコード
class Solution{
public void postOrderNor(BTNode root) {
if (root == null) {
return;
}
BTNode cur = root;
BTNode prev = null;
Deque<BTNode> stack = new ArrayDeque<>();
while (cur != null || !stack.isEmpty()) {
while (cur != null) {
stack.push(cur);
cur = cur.left;
}
BTNode top = stack.peek();
if (top.right == null || top.right == prev) {
System.out.println(top.value + " ");
stack.pop();
prev = top;
} else {
cur = top.right;
}
}
}
}
完结撒花✿✿ヽ(°▽°)ノ✿✿