链表数据结构实现(应用递归算法理念)

链表数据结构实现(应用递归算法理念)

package 算法_algorithm;
/*
 * 链表数据结构
 * 适合用于频繁的进行添加,插入,删除操作
 */
public class linked {

	public static void main(String[] args) {
		NodeManager manager=new NodeManager();
		manager.addNode("1");//增加节点
		manager.addNode("2");//增加节点
		manager.addNode("3");//增加节点
		manager.addNode("4");//增加节点
		manager.addNode("5");//增加节点
		
		manager.delNode("4");//删除节点
		
		manager.printNode();//打印所有节点
	}
}
//**************NodeNanager:*****************

class NodeManager{
	private Node root;//根节点
	
	//*******提供对外部节点操作的方法*****
			public void addNode(String name) {
				if(root==null) {
					root =new Node(name);
				}else {

					root.add(name);
				}
			}
			//删除节点
			public void delNode(String name) {
					if(root.getName().equals(name)) {
						root=root.next;
					}else {
						root.del(name);
					}	
			}
			//打印所有节点
			public void printNode() {
				if(root!=null) {
					System.out.print(root.getName()+"->");
				}
				root.print();
			}
	//*****************************
	//每一个节点对象
	class  Node{
		private String name;
		private Node next;//当前节点的下一个节点
		
		public String getName() {
			return name;
		}
		
		public Node(String name) {
			this.name=name;
		}
	//*******自己对外部节点操作的方法*****
		//添加节点
		public void add(String name) {
			if(this.next==null) {
				this.next=new Node(name);
			}else {
				this.next.add(name);//递归
			}
		}
		//删除节点
		public void del(String name) {
			if(this.next!=null) {
				if(this.next.name.equals(name)) {
					this.next=this.next.next;
				}else {
					this.next.del(name);
				}
			}
		}
		//打印所有节点
		public void print() {
			if(this.next!=null) {
				System.out.print(this.next.getName()+"->");
				this.next.print();
			}
		}
	//*****************************
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
建立二叉链表的算法步骤如下: 1. 定义二叉树结构体; 2. 定义一个栈,用于存储未构建完整的子树; 3. 从根节点开始遍历字符序列; 4. 如果当前字符为左括号,说明根节点还没有构建完整的左子树,将当前节点入栈; 5. 如果当前字符为叶子节点,则将其作为当前根节点的左儿子节点; 6. 如果当前字符为右括号,则说明当前子树已建立完整,需要回溯到根节点。此时从栈顶取出根节点,将其右儿子节点设为当前节点; 7. 重复4-6直到完成遍历。 中序遍历的递归算法如下: 1. 若根节点为空,则返回; 2. 对根节点的左子树进行递归遍历; 3. 输出当前根节点值; 4. 对根节点的右子树进行递归遍历。 实现代码如下: struct TreeNode { char val; TreeNode* left; TreeNode* right; TreeNode(char c) : val(c), left(nullptr), right(nullptr) {} }; void buildTree(TreeNode*& root, string& s, int& i, stack<TreeNode*>& stk) { if (i == s.size() || s[i] == ')') return; if (s[i] == '(') { stk.push(root); i++; } root = new TreeNode(s[i]); if (!stk.empty() && stk.top()->left == nullptr) { stk.top()->left = root; } else if (!stk.empty()) { stk.top()->right = root; stk.pop(); } i++; buildTree(root->left, s, i, stk); buildTree(root->right, s, i, stk); } void inorderTraversal(TreeNode* root) { if (!root) return; inorderTraversal(root->left); cout << root->val; inorderTraversal(root->right); } int main() { string s = "A(B(C))(D)"; int i = 0; TreeNode* root = nullptr; stack<TreeNode*> stk; buildTree(root, s, i, stk); inorderTraversal(root); return 0; }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王家视频教程图书馆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值