在網上看到乙個道題目覺的有些意思分享給大家。
/**
* 給滿出二叉樹,編寫演算法將其轉化為求和樹
* * 什麼是求和樹:二叉樹的求和樹, 是一顆同樣結構的二叉樹,其樹中的每個節點將包含原始樹中的左子樹和右子樹的和。
* * 二叉樹:
* 10
* / \
* -2 6
* / \ / \
* 8 -4 7 5
* * 求和樹:
* 20(4-2+12+6)
* / \
* 4(8-4) 12(7+5)
* / \ / \
* 0 0 0 0
* * 二叉樹給出前序和中序輸入,求和樹要求中序輸出;
* 所有處理資料不會大於int;
* * 輸入描述:
* 2行整數,第1行表示二叉樹的前序遍歷,第2行表示二叉樹的中序遍歷,以空格分割
* 輸出描述:
* 1行整數,表示求和樹的中序遍歷,以空格分割
* 示例1
* 輸入
* 複製
* 10 -2 8 -4 6 7 5
* 8 -2 -4 10 7 6 5
* 輸出
* 複製
* 0 4 0 20 0 12 0
*/
結果要求是求和中序,那麼首先將中序的結果陣列(int result)先建立起來,這個「結果陣列」肯定和輸入的中序字串的順序是一樣的,只需要將陣列中的每個元素填充即可。
就是將原中序元素下的左右子樹元素值都加起來放到該位置上,也就是將以「原中序元素」為根的整顆二叉樹元素相加再減去根元素的值。比如根據前序字串"10 -2 8 -4 6 7 5"的第乙個數字「10」和中序字串 "8 -2 -4 10 7 6 5"中的「10」在第4個位置就可知道「結果陣列」中的第4個位置的值為 (10 -2 + 8 - 4 + 6 + 7 + 5 )- 10 = 20;
/**
* 給滿出二叉樹,編寫演算法將其轉化為求和樹
* * 什麼是求和樹:二叉樹的求和樹, 是一顆同樣結構的二叉樹,其樹中的每個節點將包含原始樹中的左子樹和右子樹的和。
* * 二叉樹:
* 10
* / \
* -2 6
* / \ / \
* 8 -4 7 5
* * 求和樹:
* 20(4-2+12+6)
* / \
* 4(8-4) 12(7+5)
* / \ / \
* 0 0 0 0
* * 二叉樹給出前序和中序輸入,求和樹要求中序輸出;
* 所有處理資料不會大於int;
* * 輸入描述:
* 2行整數,第1行表示二叉樹的前序遍歷,第2行表示二叉樹的中序遍歷,以空格分割
* 輸出描述:
* 1行整數,表示求和樹的中序遍歷,以空格分割
* 示例1
* 輸入
* 複製
* 10 -2 8 -4 6 7 5
* 8 -2 -4 10 7 6 5
* 輸出
* 複製
* 0 4 0 20 0 12 0
* @author: hu
* @date: 2020-04-17 18:45
*/public class treetestmain
/*** 輸入兩行前序和中序的字串,列印求和樹的中序遍歷
* @param prestr
* @param instr
*/public void outintreeresult(string prestr, string instr)
}private void setresultintarr(int pre, int in, int originin, int result)
int rootnum = pre[0];
int sum = 0;
for(int i = 0; i < in.length; i++)
sum -= rootnum;
for(int i = 0; i < originin.length; i++)
}if(in.length == 1)
treearr childin = getintreearr(rootnum , in);
if(childin != null)
}private treearr getpretreearr(int inleftlength , int pre)
int leftarr = new int[inleftlength];
int rightarr = new int[pre.length - 1 -inleftlength];
for(int i = 1; i < pre.length; i++) else
}return new treearr(leftarr, rightarr);
}private treearr getintreearr(int rootnum , int in)
int rootposition = -1;
for(int i = 0; i < in.length; i++)
}int leftarr = new int[rootposition];
int rightarr = new int[in.length - 1 -rootposition];
for(int i = 0; i < in.length; i++) else if(i > rootposition)
}return new treearr(leftarr, rightarr);
}/**
* 將字串轉為int陣列
* @param str
* @return
*/private int getintarr(string str)
return intarr;
}private class treearr
int left;
int right;
}}
快手筆試題 將滿二叉樹轉換為求和樹
給滿出二叉樹,編寫演算法將其轉化為求和樹 什麼是求和樹 二叉樹的求和樹,是一顆同樣結構的二叉樹,其樹中的每個節點將包含原始樹中的左子樹和右子樹的和。二叉樹 10 2 6 8 4 7 5 求和樹 20 4 2 12 6 4 8 4 12 7 5 0 0 0 0 二叉樹給出前序和中序輸入,求和樹要求中序...
python 將滿二叉樹轉換成求和樹
思路 根據前序遍歷和中序遍歷構造樹,唯一的區別在於 根節點的取值 不再是root.val而是sum pre 1 除了根節點之外的所有節點和。class tree def init self,x self.val x self.left none self.right none pre list ma...
樹轉換為二叉樹
輸入一顆普通有序樹,將它轉換為對應的二叉鍊錶儲存,然後輸出該二叉樹的先序和後序遍歷序列。包含多組測試資料。每組測試資料第1行為樹的結點個數n 1 n 26 接下來包含n行,其中第i行 1 n n 的資料依次為結點i的資料值ai 為乙個小寫字母 後面各元素為結點i的兒子序列,以0結束。若ai後僅含乙個...