在Java中,處理樹節點合并的方法因具體應用場景而異。以下是一個簡單的示例,展示了如何在二叉樹中合并兩個節點。
首先,我們定義一個簡單的二叉樹節點類:
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
}
接下來,我們創建一個方法來合并兩個節點:
public static TreeNode mergeNodes(TreeNode node1, TreeNode node2) {
// 如果第一個節點為空,返回第二個節點
if (node1 == null) {
return node2;
}
// 如果第二個節點為空,返回第一個節點
if (node2 == null) {
return node1;
}
// 如果兩個節點都不為空,節點值相加
TreeNode mergedNode = new TreeNode(node1.val + node2.val);
// 遞歸合并左子樹
mergedNode.left = mergeNodes(node1.left, node2.left);
// 遞歸合并右子樹
mergedNode.right = mergeNodes(node1.right, node2.right);
return mergedNode;
}
這個方法首先檢查兩個輸入節點是否為空。如果其中一個節點為空,則返回另一個節點。如果兩個節點都不為空,我們創建一個新的TreeNode
,其值為兩個輸入節點的值之和。然后,我們遞歸地合并左子樹和右子樹,并將結果分別設置為新節點的左右子節點。最后,返回新創建的節點。
以下是一個使用此方法的示例:
public static void main(String[] args) {
TreeNode node1 = new TreeNode(1);
node1.left = new TreeNode(2);
node1.right = new TreeNode(3);
TreeNode node2 = new TreeNode(4);
node2.left = new TreeNode(5);
node2.right = new TreeNode(6);
TreeNode mergedNode = mergeNodes(node1, node2);
// 輸出合并后的樹結構
System.out.println("Merged tree:");
printTree(mergedNode, 0);
}
public static void printTree(TreeNode node, int level) {
if (node != null) {
printTree(node.right, level + 1);
for (int i = 0; i < level; i++) {
System.out.print(" ");
}
System.out.println(node.val);
printTree(node.left, level + 1);
}
}
這個示例創建了兩個二叉樹,并使用mergeNodes
方法將它們合并。然后,我們使用printTree
方法打印合并后的樹結構。